c# - async 真的不应该用于高 CPU 任务吗?

标签 c# .net asynchronous async-await

我想知道 async-await 是否真的不应该用于“高 CPU”任务。我在演示文稿中看到了这一说法。

所以我猜这意味着类似

Task<int> calculateMillionthPrimeNumber = CalculateMillionthPrimeNumberAsync();
DoIndependentWork();
int p = await calculateMillionthPrimeNumber;

我的问题是可以以上是合理的,或者如果不是,是否还有其他一些使高 CPU 任务异步的示例?

最佳答案

I was wondering whether it's true that async-await should not be used for "high-CPU" tasks.

是的,这是真的。

My question is could the above be justified

我会说这是不合理的。在一般情况下,您应该避免使用 Task.Run 来实现具有异步签名的方法。 Don't expose asynchronous wrappers for synchronous methods .这是为了防止消费者混淆,尤其是在 ASP.NET 上。

但是,使用 Task.Run调用同步方法并没有错,例如,在 UI 应用程序中。这样,您可以使用多线程 (Task.Run) 保持 UI 线程空闲,并使用 await 优雅地使用它:

var task = Task.Run(() => CalculateMillionthPrimeNumber());
DoIndependentWork();
var prime = await task;

关于c# - async 真的不应该用于高 CPU 任务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41246685/

相关文章:

c# - 注册事件,为什么代码可以编译不报错?

c# - C# 的内联服务器代码在移动到 JavaScript .js 文件时无法工作

c# - 如何在 MEF 中使用事件聚合器?

angularjs - 无法多次调用 $http.get()

c# - 如何使用 MS Open XML SDK 从 .pptx 文件中检索图像?

c# - 数据流(任务并行库)和异步等待

c# - Winforms DataGridView 数据绑定(bind)到复杂类型/嵌套属性

javascript - 设置可见和不可见的跨度

delphi - 在 Delphi 中进行异步套接字编程的惯用方法是什么?

java - 用于 Java 的异步数据库 API