我对异步编程还很陌生。我想在等待其中任何一个任务之前启动一系列任务(发出 http 请求)。
List<Guid> identifiers;
//Set identifiers to what they should be
var task = Task.WhenAll(identifiers.Select(id => _serviceConnector.GetAsync(id)));
// Call and await another request
await task;
我的问题是:我的http请求会随着通过Task.WhenAll创建任务而启动吗?或者直到更进一步的等待才会开始?谢谢!
最佳答案
WhenAll
立即(同步)具体化其可枚举参数。因此,所有任务都将在 WhenAll
返回时开始。
如果你仔细想想,这是有道理的。 WhenAll
必须知道它正在等待多少个任务,以便它知道自己的任务何时完成。此外,它必须链接到每个任务,以便在每个子任务完成时收到通知。没有其他时间来做这项工作;它必须在返回之前进行计数并设置通知。
关于linq - Task.WhenAll 何时枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43761564/