16

.NET 4 では、.NET 4.5 のSystem.Threading.Tasks.Task.WhenAll()に相当する機能はありますか?

目標は、複数の非同期タスクを 1 つのタスクにまとめ、それを構成するすべてのタスクが完了したときに完了することです。

4

3 に答える 3

27

.NET Framework 4.0 では、Visual Studio 2010 の場合はAsyncCTPがインストールされている場合、Visual Studio 2012 の場合はAsync Targeting Packがインストールされている場合、WhenAll および WhenAny を使用できます。

WhenAll および WhenAny メソッドは、TaskEx 型で提供されます。

于 2012-08-19T12:28:31.440 に答える
17

.Net 4.0 に組み込まれている最も近いものはContinueWhenAll(). continuationActiona を単純tasks => tasksにして、返された を使用できますTask

パフォーマンス上の理由から、 と一緒に使用することをお勧めしますTaskContinuationOptions.ExecuteSynchronously

于 2012-07-16T21:41:53.767 に答える
2

Task.WaitAll()別のタスクで待機してみてください。LINQ 拡張メソッドToArrayを使用して から に変換IEnumerable<Task>Task[]ます。

Task WhenAll(IEnumerable<Task> tasks)
{
    return Task.Factory.StartNew(() => Task.WaitAll(tasks.ToArray()));
}
于 2012-07-16T21:18:49.853 に答える