リストに作成された 25 のタスクがあります。一度に起動できるスレッドは 10 個だけです。
リストの foreach を実行し、TPL を使用して最初の 10 個のタスクを開始する必要があります。次に、タスクが完了するまで待ちたいと思います。いずれかのタスクが完了したら、foreach ループを続行して 11 番目のタスクを開始する必要があります。同様に、リスト内の 25 のタスクをすべて実行する必要があります。
推奨事項はありますか?
リストに作成された 25 のタスクがあります。一度に起動できるスレッドは 10 個だけです。
リストの foreach を実行し、TPL を使用して最初の 10 個のタスクを開始する必要があります。次に、タスクが完了するまで待ちたいと思います。いずれかのタスクが完了したら、foreach ループを続行して 11 番目のタスクを開始する必要があります。同様に、リスト内の 25 のタスクをすべて実行する必要があります。
推奨事項はありますか?
サイズが 10 の BlockingCollection での実装を見てみましょうhttp://msdn.microsoft.com/en-us/library/dd997371.aspx
これは一般的な要件です。.NET Framework には、完全なソリューションが組み込まれているわけではありません。これを行う良い方法は、 を待つすべてのタスクのラッパーを作成することSemaphoreSlim
です。セマフォは、必要な同時実行制限を強制します。それを待った後、実行したい実際のタスクを作成して開始できます。
このソリューションは組み込みツールを使用して簡単に実現できますが、25 のタスクすべてを一度に開始しなければならないという欠点があります。したがって、この手法では、ワークアイテムの非常に大きなストリームまたは無限のストリームを処理することはできません。あなたの場合は問題ではないようです。