我需要在Silverlight中執行多個異步任務。使用async/await執行並行任務
第三方包狀態的文檔,我可以使用
await Task.WhenAll()
不幸的Silverlight只有Task.WaitAll()
,它不是awaitable。如果我嘗試使用它,我會陷入僵局(我認爲 - 因爲整個事情會死機)
什麼是在async方法中使用的正確模式?
我需要在Silverlight中執行多個異步任務。使用async/await執行並行任務
第三方包狀態的文檔,我可以使用
await Task.WhenAll()
不幸的Silverlight只有Task.WaitAll()
,它不是awaitable。如果我嘗試使用它,我會陷入僵局(我認爲 - 因爲整個事情會死機)
什麼是在async方法中使用的正確模式?
爲Silverlight我假設你正在使用的Microsoft.Bcl.Async包。
由於此(附加)軟件包無法修改(內置)Task
類型,因此您會在TaskEx
類型中找到一些有用的方法。包括WhenAll
:
await TaskEx.WhenAll(...);
我認爲你可以嘗試使用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);
}
});
這應該是相反的。它的'WaitAll'應該被排除在Silverlight API和WhenAll應該包括在內。你是否安裝了正確版本的.NET? – Servy 2013-03-13 03:58:14
FWIW,在我的股票SL5上我只看到'Task.WaitAll';除非我安裝了一些第三方庫,否則我沒有任何'Task.WhenAll'。 – 2016-06-10 15:47:50