使用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 task in tasks) { Console.WriteLine(task.Result); } });