【发布时间】:2020-07-12 21:57:54
【问题描述】:
当谈到 .NET 中的 async/await 时,我有点困惑......
考虑以下方法:
public async Task DoSomething() {
IEnumerable<Task> ts = GetSomeTasks(); // Some tasks that would do some random IO stuff, or whatever
await Task.WhenAll(ts);
Console.WriteLine("All tasks completed!");
}
对Console.WriteLine 的调用是否保证在等待ts 中的任务之后执行?我想我已经看到在访问任务结果之前等待似乎不会像那样“阻塞”的情况。适用什么规则?
【问题讨论】:
-
您可能已经看到人们无意中创建了
Task<Task>s(或Task<Task<T>>s)的一些情况——外部Task可以轻松完成,但内部任务(实际工作)却不是尚未完成 -
@PavelAnikhouski 我在发布自己的问题之前发现了这些问题;它很相似,但并没有真正让我满意。既然我在这里得到了回答,这些问题的答案就更有意义了。
-
@Damien_The_Unbeliever 有趣 - 谢谢!
-
“块”这个词与线程相关联。在这种情况下,您有一个异步工作流,而不是线程,因此为避免误解,您可以使用“暂停”一词。这是
await运算符文档中使用的词:await 运算符暂停对封闭异步方法的评估,直到其操作数表示的异步操作完成。
标签: c# .net .net-core async-await