在示例代码中是否需要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;