如何确定操作是否 CPU 密集

How to figure out whether the operation is CPU intensive or not

我有一些代码要审查:

Task.WhenAll(contracts.Select(x => Task.Run(() =>
{
    // here some 30 lines of synchronous code

}))).GetAwaiter().GetResult();

我认为此代码在普通 foreach 中同步 运行 更好,因为 30 行代码在我看来并没有太多 CPU 密集操作。但我不是很确定。

如果一个操作需要超过 50 毫秒才能完成,最好 运行 它是异步的。因此,我必须衡量它的性能。但是在review pull request的时候是不可能的。

那么,还有其他方法可以确定操作是否真的 CPU 密集吗?

更新:

如果一个操作需要超过 50 毫秒才能完成,最好 运行 它是异步的。

我是从 Stephen Cleary 的博客上读到的: https://blog.stephencleary.com/2013/04/ui-guidelines-for-async.html

运行宁 CPU 异步操作根本没有意义,你只是增加了很多开销,然后也使用相同的 CPU 资源。

异步操作的要点是,如果你必须等待,那么你就不需要阻塞线程,所以它可以做其他事情。

所以即使操作 运行s 2 分钟纯 CPU,你也不会通过异步调用它来赢得任何东西。

此外,您只是在同步等待所有操作完成。因此,您可以并行使用 Task.Run 到 运行 操作,但您不需要为此做任何其他事情。

据我所知,仅执行 .Result.GetAwaiter().GetResult() 之间的唯一区别将是您获得的异常类型。

所以我的观点是:您的代码中已经没有任何异步,因此没有什么可衡量的。