调用等待使用Task.Run()创建的任务

sap*_*ito 3 .net c# task-parallel-library async-await

为什么可以在C#中执行此操作?

var task = Task.Run (...);
await task;
Run Code Online (Sandbox Code Playgroud)

是不是Task.Run()应该用于CPU绑定代码?要求await这个有意义吗?

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

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

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

Ser*_*rvy 7

使用中没有任何意义Wait.没有必要启动一个新的线程来做工作,如果你只是要让另一个线程坐在那里,什么都不做等待.这两者唯一明智的选择就是await它.等待任务是完全合理的,因为它允许原始线程继续执行.

await任何类型Task(在正确的背景下)都是明智的,无论它来自哪里.async等待的方法没有什么特别之处.事实上,在每个异步程序中都需要有不使用async关键字的异步方法; 如果每个人都await在等待一种async方法,那么你将无处可去.

  • @sapito你不应该如此残忍地想要对你的用户这样做.如果要在UI中禁用某些控件,请禁用这些控件; 不要冻结消息循环并使整个应用程序无响应. (3认同)