【问题标题】:Execute parallel tasks with async/await使用 async/await 执行并行任务
【发布时间】:2013-03-13 12:27:00
【问题描述】:

我需要在 Silverlight 中执行多个异步任务。

我可以使用的第 3 方包状态的文档

await Task.WhenAll()

不幸的是,silverlight 只有Task.WaitAll(),而且无法等待。如果我尝试使用它,我会陷入僵局(我假设 - 因为整个事情都会冻结)

在异步方法中使用的正确模式是什么?

【问题讨论】:

  • 应该是相反的。 WaitAll 应该从 silverlight API 中排除,而 WhenAll 应该包括在内。您是否安装了正确版本的 .NET?
  • FWIW,在我的股票 SL5 上,我只看到 Task.WaitAll;我假设没有Task.WhenAll,除非我安装了一些第 3 方库。

标签: c# .net silverlight async-await


【解决方案1】:

对于 Silverlight,我假设您使用的是 Microsoft.Bcl.Async 包。

由于这个(附加)包不能修改(内置)Task 类型,你会在TaskEx 类型中找到一些有用的方法。包括WhenAll

await TaskEx.WhenAll(...);

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,我认为您可以尝试使用 TaskFactory.ContinueWhenAll 来获得类似的行为。 Example:

    var task1 = Task.Factory.StartNew(() =>
    {
        Thread.Sleep(1000);
        return "dummy value 1";
    });
    
    var task2 = Task.Factory.StartNew(() =>
    {
        Thread.Sleep(2000);
        return "dummy value 2";
    });
    
    var task3 = Task.Factory.StartNew(() =>
    {
        Thread.Sleep(3000);
        return "dummy value 3";
    });
    
    Task.Factory.ContinueWhenAll(new[] { task1, task2, task3 }, tasks =>
    {
        foreach (Task<string> task in tasks)
        {
            Console.WriteLine(task.Result);
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 2015-01-20
      • 2021-12-13
      • 2019-05-24
      • 2017-01-06
      • 2018-11-24
      • 1970-01-01
      相关资源
      最近更新 更多