我要检查一些代码:
Task.WhenAll(contracts.Select(x => Task.Run(() =>
{
// here some 30 lines of synchronous code
}))).GetAwaiter().GetResult();
我认为此代码最好在纯foreach
中同步运行,因为在我看来30行代码似乎不需要太多的CPU密集型操作。但是我对此不太确定。
如果一项操作要花费50毫秒以上的时间,则最好以异步方式运行它。因此,我必须衡量它的性能。但是,在查看拉取请求时是不可能的。
那么,还有其他方法可以确定该操作是否确实占用大量CPU吗?
更新:
如果一项操作要花费50毫秒以上的时间,则最好以异步方式运行它。
我从Stephen Cleary的博客中阅读了它: https://blog.stephencleary.com/2013/04/ui-guidelines-for-async.html
答案 0 :(得分:1)
根本没有必要异步运行CPU操作,您只需添加大量开销,然后再使用相同的CPU资源即可。
异步操作的要点是,如果您必须等待,则无需阻塞踏板,因此它可以执行其他操作。
因此,即使该操作在纯CPU上运行2分钟,您也不会通过异步调用来赢得任何东西。
此外,您只是在同步等待所有操作完成。因此,您可以使用Task.Run
并行运行操作,但是您无需执行其他任何操作。
据我所知,仅做.Result
和.GetAwaiter().GetResult()
之间的唯一区别就是您得到的异常类型。
所以我的意思是:您的代码中已经没有异步,因此也没有要测量的东西。