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

3

我有一个这样的情况:

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();;

但是我不想像那样等待两个任务,因为这样它们不会同时执行,对吗?还是我误解了? 我已经看到这个作为一个参考:使用不同结果等待多个任务 但我认为这是一个稍微不同的情况,在我的情况下不起作用。 有什么想法吗? 谢谢
编辑:
await Task.WhenAll(catTask, houseTask, carTask);

var cat = await catTask;

var house = await houseTask;

var car = await carTask;

这似乎需要等待四次才能得到三个结果。然而,@armenm已经展示了如何避免这种情况。


这两个函数的返回类型应该相同。 - Saadi
你为什么认为你找到的那个在你的情况下不起作用? - James Thorpe
这让我想到他们不会同时被解雇。 - Kieran
那个例子中它们是在等待两次,还是因为已经等待过了所以不会有影响? - Kieran
请阅读答案下的评论等详细信息 - 它们比在此重复要更详细。如果您仍然认为不适用于您,请编辑问题并说明原因。 - James Thorpe
显示剩余3条评论
1个回答

9

下面开始,您需要为具有相应类型的任务拥有单独的变量:

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;

谢谢。我之前尝试使用结果,但我认为我设置的方式不允许它。 - Kieran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接