如何将WaitAll任务的结果分配给变量

时间:2018-06-11 09:55:46

标签: c# asynchronous async-await

我有这样的情况:

var retrievalTasks = new Task[2];

retrievalTasks[0] = GetNodesAsync();

retrievalTasks[1] = GetAssetsToHandleAsync();

Task.WaitAll(retrievalTasks);

我希望将retrievalTasks[0]retrievalTasks[1]的结果存储在变量中。

我可以通过以下方式实现这一目标:

 var a = await GetNodesAsync();
 var b = await GetAssetsToHandleAsync();;

但是我宁愿不要那样等待,因为那时它们不是同时被解雇了吗?还是我误会了?

我已将此视为参考:Awaiting multiple Tasks with different results

但我认为这种情况略有不同,在我的情况下无效。

有什么想法吗?

谢谢

编辑:

await Task.WhenAll(catTask, houseTask, carTask);

var cat = await catTask;

var house = await houseTask;

var car = await carTask;

这似乎等了四次才得到三个结果。但是,@ armenm已经展示了如何避免这种情况。

1 个答案:

答案 0 :(得分:1)

在这里,我们需要为具有相应类型的任务分别设置变量:

var task1 = GetNodesAsync();
var task2 = GetAssetsToHandleAsync();

Task.WaitAll(new Task[] { task1, task2 });

var result1 = task1.Result;
var result2 = task2.Result;

但我建议让它异步:

var task1 = GetNodesAsync();
var task2 = GetAssetsToHandleAsync();

await Task.WhenAll(new Task[] { task1, task2 });

var result1 = task1.Result;
var result2 = task2.Result;