首頁 >後端開發 >C++ >SemaphoreSlim 如何限制 .NET 中的並發任務執行?

SemaphoreSlim 如何限制 .NET 中的並發任務執行?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-28 02:24:09140瀏覽

How Can SemaphoreSlim Limit Concurrent Task Execution in .NET?

使用任務限制並行任務的並發執行

很多場景下,需要限制同時並行執行的任務數量加工。當存在資源限製或過多的並發可能導致效能下降時尤其如此。

為了應對這項挑戰,.NET 提供了多種用於管理任務並發的選項。一種流行的方法是利用任務並行庫 (TPL) 和 SemaphoreSlim 類別。

例如,考慮這樣一個場景,您有一組 100 個任務,每個任務大約需要 10 秒才能完成。您希望在任何給定時間將執行限制為僅 10 個任務。

要使用任務實現此目的:

  • 建立 SemaphoreSlim 實例:建立 SemaphoreSlim對象,傳遞最大並發任務數作為參數(在本例中, 10).
  • 將任務建立包裝在循環中:啟動 115 次迭代的循環(100 個任務,其中 15 個任務允許潛在的延遲)。
  • 取得信號量在任務建立之前: 在迴圈內,對信號量呼叫 Wait() 來取得許可,確保同時執行的任務不超過 10 個。
  • 建立新任務: 使用 Task.Factory.StartNew 建立新任務。指定TaskCreationOptions.LongRunning表示任務可能需要很長時間才能完成。
  • 任務完成後釋放信號量:任務完成後,使用ContinueWith繼續任務並呼叫Release在信號量上釋放獲得的許可,允許另一個任務開始執行。

透過實現透過這種方法,您可以有效地限制並發運行的任務數量,從而確保應用程式中任務的受控且資源高效的執行。

以上是SemaphoreSlim 如何限制 .NET 中的並發任務執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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