繁体   English   中英

使用async / await执行并行任务

[英]Execute parallel tasks with async/await

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

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

await Task.WhenAll()

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

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

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

由于此(附加组件)包无法修改(内置) Task类型,因此您将在TaskEx类型中找到一些有用的方法。 包括WhenAll

await TaskEx.WhenAll(...);

我认为如果我正确理解你的问题,你可以尝试使用TaskFactory.ContinueWhenAll来产生类似的行为。 示例

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM