ホームページ >バックエンド開発 >C++ >.NET で限られた数の同時タスクで多くのタスクを連続して実行するにはどうすればよいですか?

.NET で限られた数の同時タスクで多くのタスクを連続して実行するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-28 10:29:18870ブラウズ

How Can I Run Many Tasks Sequentially with a Limited Number of Concurrent Tasks in .NET?

タスク制限を設けて一連のタスクを順次実行する

多数のタスクを実行する必要があるシナリオがあるとします (例: 、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。