用有限的執行緒並發執行任務
問題:
問題:
問題:
SemaphoreSlim maxThread = new SemaphoreSlim(10);
for (int i = 0; i < 115; i++)
{
maxThread.Wait();
Task.Factory.StartNew(() =>
{
// Your task implementation
}, TaskCreationOptions.LongRunning)
.ContinueWith((task) => maxThread.Release());
}
登入後複製
你必須假設你有一組依序執行的任務,最多只能執行X 個任務時間。傳統上,ThreadPool.QueueUserWorkItem() 用於此類任務,但現在它被認為是次優方法。
使用任務的解決方案:-
要實現此並發限制,請使用對於任務,我們可以使用 SemaphoreSlim 物件來管理可用執行緒的數量。以下是示範此方法的程式碼片段:
- 程式碼的工作原理如下:
-
SemaphoreSlim 初始化: SemaphoreSlim 使用最大執行緒數進行初始化10個,最多允許運行10個任務
-
任務執行: 對於每個要執行的任務,都會呼叫信號量的 Wait() 方法,該方法會阻塞,直到有執行緒可用。一旦執行緒空閒,就會使用 Task.Factory.StartNew() 啟動新任務。
任務完成: 每個任務完成後,附加到任務的ContinueWith() 方法會釋放呼叫訊號量的Release()方法所使用的執行緒。 順序執行:由於信號量強制執行有限的執行緒可用性,任務按順序執行,在任何給定時間最多運行 10 個任務。
以上是如何使用C#以有限數量的執行緒並發執行多個任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!