首頁 > 後端開發 > C++ > 如何使用SemaphoreSlim和Tasks來有效率地管理並發任務?

如何使用SemaphoreSlim和Tasks來有效率地管理並發任務?

DDD
發布: 2024-12-31 10:53:09
原創
759 人瀏覽過

How Can SemaphoreSlim and Tasks Be Used to Manage Concurrent Tasks Efficiently?

使用 SemaphoreSlim 和 Tasks 管理並發任務

要有效處理需要限制同時運行的任務數量的場景,請考慮使用SemaphoreSlim 和 Tasks的結合,一種遵循最佳實踐並避免與ThreadPool.QueueUserWorkItem().

用於限制並發的SemaphoreSlim:

SemaphoreSlim 是.NET 中控制並發的強大工具。它允許您指定可以同時持有的線程安全令牌(許可)的最大數量。這在我們的場景中至關重要,我們希望限制在任何給定時間運行的任務數量。

任務執行的任務:

任務表示非同步操作,可以獨立於呼叫執行緒進行排程與管理。與 ThreadPool.QueueUserWorkItem() 相比,它們提供了一種更靈活、更有效率的執行任務的方式。

結合SemaphoreSlim 和任務:

要實現您的目標,請按照以下步驟操作:

  1. 創建一個具有所需最大並發數的SemaphoreSlim 實例任務(您的情況為10 個)。
  2. 對於每個任務,建立並啟動一個新任務。
  3. 為每個任務新增延續,以便在任務完成時釋放 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());
}
登入後複製

在此範例:

  • maxThread
  • maxThreadThread同時任務數限制為10 個的SemaphoreSlim 實例。
  • Wait() 取得許可SemaphoreSlim,確保遵守最大並發限制。
  • Task.Factory.StartNew()為每個任務建立並啟動一個新任務。

ContinueWith ()

為每個任務添加一個延續,當任務執行時釋放SemaphoreSlim 許可透過使用這種方法,您可以有效地管理一組任務,將並發運行的任務數量限制為指定值,同時還可以利用任務非同步執行的優勢。

以上是如何使用SemaphoreSlim和Tasks來有效率地管理並發任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板