ASP.NET MVC5. 异步等待。等待多个返回类型的任务。

4
我刚开始使用 .net mvc 5 async await 技术。我有一些需要在运行时确定并行运行的任务,它们都具有不同的返回类型,我想使用 Task.WhenAll 等待它们完成。像这个问题所讨论的那样,但我没有预定义要运行的任务集合。我需要在运行时创建一个具有不同返回类型的任务集合并等待它们完成。
1个回答

3
您可以创建一个List<Task>,然后使用Task.WhenAll
var tasks = new List<Task>();
var task1 = Func1Async();
tasks.Add(task1);
var task2 = Func2Async();
tasks.Add(task2);
...

await Task.WhenAll(tasks);

请注意,由于返回类型不同,您需要逐个提取结果:
var result1 = await task1;
var result2 = await task2;

就像我说的一样,我不知道集合中会有多少个任务。所以我不能这样做:“var result1 = await task1; var result2 = await task2;” - user1803361
可能是这样的,但是用C#来实现。https://github.com/BoltsFramework/Bolts-Android/issues/13 - user1803361
1
@user1803361:那么您只需要使用 dynamic,像这样:var results = tasks.Select((dynamic x) => x.Result); - Stephen Cleary
谢谢@Stephen Cleary。您能否为我们解释一下在这种情况下如何处理异常(一个或多个任务失败)?再次感谢 :) - user1803361
如果一个或多个任务失败,await Task.WhenAll这一行将抛出异常。 - Stephen Cleary

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