在任務限制下按順序運行一組任務
假設您有一個場景需要執行大量任務(例如,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中文網其他相關文章!