タスク制限を設けて一連のタスクを順次実行する
多数のタスクを実行する必要があるシナリオがあるとします (例: 、100) ですが、同時に実行するタスクの数を制限したいとします (例: 10)。この問題は、.NET Framework 4.0 で導入された 'Task' クラスを使用すると効率的に対処できます。
特定のシナリオでは、'SemaphoreSlim' クラスを利用して、同時に実行されるタスクの最大数を制御できます。 「SemaphoreSlim」を使用すると、同時操作の数を制限できるセマフォ オブジェクトを作成できます。
目的の動作を実現する方法を示すサンプル実装を次に示します。
using System.Threading.Tasks; using System.Threading; class Program { static void Main() { // Create a SemaphoreSlim object to limit the number of concurrent tasks to 10 SemaphoreSlim maxThread = new SemaphoreSlim(10); // Create 115 tasks with each task performing a specific action for (int i = 0; i < 115; i++) { // Acquire a permit from the SemaphoreSlim object, blocking if the limit is reached maxThread.Wait(); // Schedule a new task Task.Factory.StartNew(() => { // Perform your desired task here }, TaskCreationOptions.LongRunning) // Once the task is complete, release the permit back to the SemaphoreSlim object .ContinueWith((task) => maxThread.Release()); } } }
この実装では、各タスクは実行する前に「SemaphoreSlim」オブジェクトから許可を取得します。許可の最大数 (この場合は 10) を取得した場合、セマフォは許可が解放されるまで後続のタスクの許可の取得をブロックします。
このアプローチを使用すると、一連のタスクを順番に実行できます。事前定義された数のタスクのみが同時に実行されるようにします。すべてのタスクが完了すると、「Main」メソッドが終了し、プログラムの終了を示します。
以上が.NET で限られた数の同時タスクで多くのタスクを連続して実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。