等待多个任务结果不同

我有3个任务:

private async Task<Cat> FeedCat() {} private async Task<House> SellHouse() {} private async Task<Tesla> BuyCar() {} 

他们都需要运行之前我的代码可以继续,我也需要结果。 没有一个结果有任何共同之处

我如何打电话,等待3个任务完成,然后得到结果?

在使用WhenAll ,您可以单独将结果拉出来await

 var catTask = FeedCat(); var houseTask = SellHouse(); var carTask = BuyCar(); await Task.WhenAll(catTask, houseTask, carTask); var cat = await catTask; var house = await houseTask; var car = await carTask; 

你也可以使用Task.Result (因为你知道这一点,他们都已经成功完成)。 不过,我build议使用await因为它显然是正确的,而Result可能会在其他情况下导致问题。

开始他们之后,分别await三项任务。

 var catTask = FeedCat(); var houseTask = SellHouse(); var carTask = BuyCar(); var cat = await catTask; var house = await houseTask; var car = await carTask; 

如果您使用的是C#7,则可以使用像这样的方便包装方法…

 public static class TaskEx { public static async Task<(T1, T2)> WhenAll<T1, T2>(Task<T1> task1, Task<T2> task2) { await Task.WhenAll(task1, task2); return (task1.Result, task2.Result); } } 

…当你想用不同的返回types等待多个任务时,使用这种方便的语法。 当然,你需要为不同数量的任务进行多重重载。

 var (someInt, someString) = await TaskEx.WhenAll(GetIntAsync(), GetStringAsync()); 

你可以将它们存储在任务中,然后等待它们:

 var catTask = FeedCat(); var houseTask = SellHouse(); var carTask = BuyCar(); await Task.WhenAll(catTask, houseTask, carTask); Cat cat = await catTask; House house = await houseTask; Car car = await carTask; 

你可以使用Task.WhenAll或者Task.WaitAll ,这取决于你是否希望线程等待。 看看这两个链接的解释。

WaitAll与WhenAll

使用Task.WhenAll然后等待结果:

 var tCat = FeedCat(); var tHouse = SellHouse(); var tCar = BuyCar(); await Task.WhenAll(tCat, tHouse, tCar); Cat cat = await tCat; House house = await tHouse; Tesla car = await tCar; //as they have all definitely finished, you could also use Task.Value.