任务.WhenAll结果排序

49
我从这里了解到,Task.WhenAll的任务执行顺序是不确定的,但我找不到关于结果顺序的任何信息。
结果集合中的结果是否按照输入时任务的顺序排列,还是结果可以以任意顺序出现?
根据我进行的测试,似乎结果会保持顺序,但我需要确认一下。

Task.WhenAll的任务执行顺序是不确定的,这个说法可能会引起误解。Task.WhenAll并不执行任何任务,它只是等待任务完成。它对任务的执行没有任何影响。 - Theodor Zoulias
1个回答

120
MSDN中:

Task.WhenAll<TResult>(IEnumerable<Task<TResult>>)

Task<TResult>作为输入的重载函数包含以下语句:

如果没有任何任务出错或被取消,返回的任务将以“RanToCompletion”状态结束。返回任务的结果将被设置为一个数组,该数组按照提供的任务的相同顺序包含所有结果(例如,如果输入的任务数组包含t1、t2、t3,则输出任务的结果将返回一个TResult[],其中arr[0] == t1.Result,arr[1] == t2.Result,arr[2] == t3.Result)。


7
为了让像我一样阅读这篇文章的人更加清楚,重载方法 Task.WhenAll<TResult>(Task<TResult>[]) 同样包含相同的语句。 - Miguel Alexandre
因为数组是可枚举的。 - PRMan
这是唯一的四个重载之一,其中包含这个语句。 - Ama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接