为什么可以在 C# 中做到这一点?

var task = Task.Run (...);
await task;
Task.Run() 不应该用于受 CPU 限制的代码吗?为此调用 await 有意义吗?

即,在调用 Task.Run 后,我了解到该任务正在线程池的另一个线程中运行。调用 await 的目的是什么?仅仅调用 task.Wait() 不会更有意义吗?

最后一个问题,我的第一印象是 await 专门用于 async 方法。将它用于 Task.Run() 返回的任务是否常见?

编辑。这也让我想知道,为什么我们有 Task.Wait () 而不是 Task.Await() 。我的意思是,为什么一个方法用于 Wait() ,而 keyworkd 用于 await 。在这两种情况下使用一种方法不会更一致吗?

最佳答案

使用 Wait 根本没有意义。如果你只是想让另一个线程坐在那里等待它,那么启动一个新线程来完成工作是没有意义的。这两者中唯一明智的选择是对其进行 await。等待任务是完全合理的,因为它允许原始线程继续执行。
await 任何类型的 Task(在正确的上下文中)都是明智的,无论它来自哪里。等待的 async 方法没有什么特别之处。事实上,在每个异步程序中都需要有不使用 async 关键字的异步方法;如果每个 await 都在等待 async 方法,那么您将永远无处可开始。

关于c# - 在使用 Task.Run() 创建的任务上调用 await,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26107468/

10-17 02:28