2013-03-13 27 views
6

Silverlightで複数の非同期タスクを実行する必要があります。サードパーティのパッケージの状態のasync/awaitで並列タスクを実行する

ドキュメントは、私だけTask.WaitAll()を持って

await Task.WhenAll() 

残念ながらSilverlightを使用することができ、それがawaitableではありません。私はそれを使用しようとするとデッドロックが発生します(私は全部が凍結するので、私は仮定します)

非同期メソッドで使用する適切なパターンは何ですか?

+0

これは逆です。 Silverlight APIから除外されるべきWaitAllとWhenAllが含まれるべきです。適切なバージョンの.NETがインストールされていますか? – Servy

+0

FWIW、私の株式SL5には私は 'Task.WaitAll'しか見ることができません。第三者のライブラリをインストールしない限り、 'Task.WhenAll'はありません。 –

答えて

10

私はあなたがMicrosoft.Bcl.Asyncパッケージを使用していると仮定します。

この(アドオン)パッケージは(内蔵の)Taskタイプを変更できないため、TaskExタイプの便利なメソッドがあります。 WhenAllを含む:

await TaskEx.WhenAll(...); 
1

質問が正しく理解されていれば、TaskFactory.ContinueWhenAllを使用して同様の動作をさせることができます。 Example:Silverlightの

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); 
    } 
}); 
関連する問題