使用 SemaphoreSlim 和 Tasks 管理並發任務
要有效處理需要限制同時運行的任務數量的場景,請考慮使用SemaphoreSlim 和 Tasks的結合,一種遵循最佳實踐並避免與ThreadPool.QueueUserWorkItem().
用於限制並發的SemaphoreSlim:
SemaphoreSlim 是.NET 中控制並發的強大工具。它允許您指定可以同時持有的線程安全令牌(許可)的最大數量。這在我們的場景中至關重要,我們希望限制在任何給定時間運行的任務數量。
任務執行的任務:
任務表示非同步操作,可以獨立於呼叫執行緒進行排程與管理。與 ThreadPool.QueueUserWorkItem() 相比,它們提供了一種更靈活、更有效率的執行任務的方式。
結合SemaphoreSlim 和任務:
要實現您的目標,請按照以下步驟操作:
範例程式碼:
SemaphoreSlim maxThread = new SemaphoreSlim(10); for (int i = 0; i < 115; i++) { maxThread.Wait(); Task.Factory.StartNew(() => { // Your task code here }, TaskCreationOptions.LongRunning) .ContinueWith((task) => maxThread.Release()); }
在此範例:
ContinueWith ()
為每個任務添加一個延續,當任務執行時釋放SemaphoreSlim 許可透過使用這種方法,您可以有效地管理一組任務,將並發運行的任務數量限制為指定值,同時還可以利用任務非同步執行的優勢。以上是如何使用SemaphoreSlim和Tasks來有效率地管理並發任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!