4 回答

TA貢獻1982條經(jīng)驗 獲得超2個贊
使用完后WhenAll,您可以使用以下命令分別提取結(jié)果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(因為到目前為止,您已經(jīng)知道它們都已成功完成)。但是,我建議使用,await因為它顯然是正確的,而Result在其他情況下可能會引起問題。

TA貢獻1798條經(jīng)驗 獲得超3個贊
await全部啟動后,僅將三個任務(wù)分開。
var catTask = FeedCat();
var houseTask = SellHouse();
var carTask = BuyCar();
var cat = await catTask;
var house = await houseTask;
var car = await carTask;

TA貢獻1829條經(jīng)驗 獲得超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);
}
}
...當(dāng)您想等待具有不同返回類型的多個任務(wù)時啟用類似的方便語法。當(dāng)然,您必須為等待不同數(shù)量的任務(wù)進行多次重載。
var (someInt, someString) = await TaskEx.WhenAll(GetIntAsync(), GetStringAsync());

TA貢獻1864條經(jīng)驗 獲得超2個贊
您可以將它們存儲在任務(wù)中,然后等待它們:
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;
- 4 回答
- 0 關(guān)注
- 481 瀏覽
添加回答
舉報