c# - C# .NET 中的 await Task.WhenAll 是否会阻塞?
问题描述
当谈到 .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
?我想我已经看到在访问任务结果之前等待似乎不会像那样“阻塞”的情况。适用什么规则?
解决方案
是否保证在等待 ts 中的任务后执行对 Console.WriteLine 的调用?
是的。
我想我已经看到在访问任务结果之前等待似乎不会像那样“阻塞”的情况。
不,事实并非如此。您只会在 await 运算符(或可能是语句中的下一个表达式,例如,一旦等待的事情完成后才能到达该语句(await a) + (await b)
。
请注意,它Task.WhenAll
本身并不是一个阻塞方法(与 不同Task.WaitAll
) - 但它返回一个任务,该任务在作为参数传递的所有任务都完成之前不会完成。
推荐阅读
- jupyter-lab - 用于文件操作的 jupyterlab 钩子
- python - 无法使用 Docker 容器和 Flask 启动 Python API
- c# - 如何知道 Excel 复制到剪贴板的数据的 .csv 字段分隔符
- php - 在家谱 SQL/PHP 中查找共同祖先的概念
- javascript - Chrome 扩展:更改特定类的元素的呈现方式?
- javascript - axios 得到 404 因为 axios 模拟适配器
- c# - JWT 加密的密钥管理 (ASP.NET Core 5)
- powerbi - 无法让行标题在具有自定义主题的 Power BI 中更改颜色
- microsoft-graph-api - MsalUiRequiredException:没有帐户或登录提示传递给 AcquireTokenSilent 调用
- javascript - 不发送 httpResponse 时的 NestJs 异常处理