在示例代码中是否需要Task.WhenAll?

在下面的代码中,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()方法是不同的。

您的第一个示例将等待两个任务完成,然后检索两者的结果。

您的第二个示例将等待任务一次完成一个任务。

您应该使用更清楚的代码。 如果两个任务具有相同的结果类型,则可以从WhenAll检索结果:

 var results = await Task.WhenAll(task1, task2); 

第一个结构更具可读性。 在获得结果之前,您明确表示您打算等待所有任务完成。 我认为使用它代替第二个是合理的。

如果你添加第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;