linq - Task.WhenAll 何时枚举?

标签 linq asynchronous task

我对异步编程还很陌生。我想在等待其中任何一个任务之前启动一系列任务(发出 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/

相关文章:

jquery - getJSON 请求返回未定义

python - 将参数传递给自定义 celery 任务

c# - 将 json 响应转换为列表

node.js - 如何创建异步 Gulp 插件?

c# - LINQ 到 SQL : Left join on multiple columns

c - 在 C 中实现异步函数

wpf - C#混合使用Task和Dispatcher.Invoke,为什么会停止?

带有错误处理的 C# Task.WaitAll() 取消

c# - 将一个数组的顺序与另一个数组匹配

c# - LINQ 扩展方法是否保证保留顺序?