等待具有不同结果的多个任务

我有3个任务:


private async Task<Cat> FeedCat() {}

private async Task<House> SellHouse() {}

private async Task<Tesla> BuyCar() {}

它们都需要先运行,然后我的代码才能继续,并且我还需要它们的结果。没有结果有什么共同点


如何调用并等待3个任务完成然后获得结果?


小怪兽爱吃肉
浏览 457回答 4
4回答

临摹微笑

使用完后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(因为到目前为止,您已经知道它们都已成功完成)。但是,我建议使用,await因为它显然是正确的,而Result在其他情况下可能会引起问题。

呼如林

await全部启动后,仅将三个任务分开。var catTask = FeedCat();var houseTask = SellHouse();var carTask = BuyCar();var cat = await catTask;var house = await houseTask;var car = await carTask;

烙印99

如果您使用的是C#7,则可以使用这样的便捷包装方法...public static class TaskEx{&nbsp; &nbsp; public static async Task<(T1, T2)> WhenAll<T1, T2>(Task<T1> task1, Task<T2> task2)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; await Task.WhenAll(task1, task2);&nbsp; &nbsp; &nbsp; &nbsp; return (task1.Result, task2.Result);&nbsp; &nbsp; }}...当您想等待具有不同返回类型的多个任务时启用类似的方便语法。当然,您必须为等待不同数量的任务进行多次重载。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;
打开App,查看更多内容
随时随地看视频慕课网APP