首頁 >後端開發 >C++ >如何在 .NET 中以有限數量的並發任務順序執行多個任務?

如何在 .NET 中以有限數量的並發任務順序執行多個任務?

DDD
DDD原創
2024-12-28 10:29:18877瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn