从下面的测试我们可以看到当前版本的框架保证输出顺序和输入任务的顺序一致。
async Task<string> GetString1()
{
await Task.Delay(2000);
return "1";
}
async Task<string> GetString2()
{
await Task.Delay(1000);
return "2";
}
var results = await Task.WhenAll(GetString1(), GetString2());
//now we have results[0] == "1" results[1] == "2"
但是,从文档中我找不到有关此行为的任何信息,这意味着它不是文档保证的。从这个问题的答案的观点来看:
我需要在输出中放置“订单标志”吗?例如将示例代码更改为以下内容:
class OrderTaskResult<T>
{
public OrderTaskResult(int order, T value)
{
this.Order = order;
this.Value = value;
}
public int Order { get; private set; }
public T Value { get; private set; }
}
async Task<OrderTaskResult<string>> GetString1()
{
await Task.Delay(2000);
return new OrderTaskResult<string>(1, "1");
}