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