为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

小怪兽爱吃肉 2019-10-06 11:21:29
我有3个任务:private async Task<Cat> FeedCat() {}private async Task<House> SellHouse() {}private async Task<Tesla> BuyCar() {}它们都需要先运行,然后我的代码才能继续,并且我还需要它们的结果。没有结果有什么共同点如何调用并等待3个任务完成然后获得结果?
查看完整描述

4 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

使用完后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在其他情况下可能会引起问题。


查看完整回答
反对 回复 2019-10-06
?
呼如林

TA贡献1798条经验 获得超3个赞

await全部启动后,仅将三个任务分开。


var catTask = FeedCat();

var houseTask = SellHouse();

var carTask = BuyCar();


var cat = await catTask;

var house = await houseTask;

var car = await carTask;


查看完整回答
反对 回复 2019-10-06
?
烙印99

TA贡献1829条经验 获得超13个赞

如果您使用的是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);

    }

}

...当您想等待具有不同返回类型的多个任务时启用类似的方便语法。当然,您必须为等待不同数量的任务进行多次重载。


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


查看完整回答
反对 回复 2019-10-06
?
慕斯王

TA贡献1864条经验 获得超2个赞

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


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;


查看完整回答
反对 回复 2019-10-06
  • 4 回答
  • 0 关注
  • 455 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信