在下面的代码中,task1和task2相互独立,可以并行运行。以下两个实现有什么区别?
var task1 = GetList1Async();
var task2 = GetList2Async();
await Task.WhenAll(task1, task2);
var result1 = await task1;
var result2 = await task2;
和
var task1 = GetList1Async();
var task2 = GetList2Async();
var result1 = await task1;
var result2 = await task2;
为什么我要选择一个而不是另一个?
编辑:我想补充一点,GetList1Async()和GetList2Async()方法的返回类型是不同的。
答案 0 :(得分:10)
您的第一个示例将等待两个任务完成,然后检索两者的结果。
您的第二个示例将等待任务一次完成一个。
您应该使用更清楚的代码。如果两个任务具有相同的结果类型,则可以从WhenAll
检索结果:
var results = await Task.WhenAll(task1, task2);
答案 1 :(得分:1)
第一个结构更具可读性。 在获得结果之前,您明确表示您打算等待所有任务完成。我发现使用它代替第二种方式是合理的。
如果添加第3或第4个任务,写作也会少一些...... 即:
await Task.WhenAll(task1, task2, task3, task4);
与之相比:
var result1 = await task1;
var result2 = await task2;
var result3 = await task3;
var result4 = await task4;