我需要在 Silverlight 中执行多个异步任务。
我可以使用的第 3 方包状态的文档
await Task.WhenAll()
不幸的是silverlight只有Task.WaitAll()
它,它是不可等待的。如果我尝试使用它,我会陷入僵局(我假设 - 因为整个事情都冻结了)
在异步方法中使用的正确模式是什么?
我需要在 Silverlight 中执行多个异步任务。
我可以使用的第 3 方包状态的文档
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);
}
});