【问题标题】:Asp.net mvc5 . async await. wait on task with diff return typesASP.NET MVC 5 .异步等待。等待具有不同返回类型的任务
【发布时间】:2014-08-19 18:38:27
【问题描述】:

我刚开始使用 .net mvc 5 async await 。我在运行时确定要并行运行的任务很少。它们都有不同的返回类型,我想使用 Task.WhenAll 来等待它们。就像question 讨论的那样,但我没有要运行的预定义任务集。我需要在运行时创建具有不同返回类型的任务集合 然后等待。

【问题讨论】:

    标签: c# .net asynchronous task-parallel-library async-await


    【解决方案1】:

    您可以只创建一个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;”
    • 可能是这样的,但在 c# 中。github.com/BoltsFramework/Bolts-Android/issues/13
    • @user1803361:那你就用dynamic,比如:var results = tasks.Select((dynamic x) =&gt; x.Result);
    • 谢谢@Stephen Cleary。您能否介绍一下在这种情况下我们如何处理异常(一个或多个任务失败)? .再次感谢:)
    • 如果一个或多个任务失败,await Task.WhenAll 行将抛出异常。
    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    相关资源
    最近更新 更多