【发布时间】:2020-12-24 20:42:45
【问题描述】:
考虑以下 C# 代码:
var task1 = GetSomethingAsync();
var task2 = GetSomethingElseAsync();
await Task.WhenAll(task1, task2); //is this required?
var something = await task1;
var somethingElse = await task2;
Task.WhenAll() 是否对执行速度有任何影响(而不是如何抛出任何错误)?如果没有,有什么理由让我无论如何都应该拥有它?
更新:
正如一些人正确指出的那样,我应该使用 WhenAll() 而不是 WaitAll() - 我已经更新了问题。但是我仍然不清楚答案 - 是否有理由拥有WhenAll()? Why should I prefer single 'await Task.WhenAll' over multiple awaits? 这里的答案之一是关于快速通道异步方法。如果我的异步方法是快速通道,它会有所作为吗?我主要关心执行时间,即如果没有WhenAll(),我的两个调用是否有可能按顺序执行。但也很高兴知道是否有任何其他原因使用WhenAll()。
【问题讨论】:
-
你混合了两种不同的做事方式。您只能在异步方法中等待。
Task.WaitAll更多用于阻塞线程直到所有任务完成。await将启动一个任务并等待结果,阻塞直到每个任务完成。所以在 task1 完成之前 task2 甚至不会启动。
标签: c# async-await