我有一個等待訊息到達佇列的偵聽器。我想限制任務的數量,以便對于佇列中的每 1000 條訊息,我需要等到它們完成后再處理下一組訊息。其原因是 ProcessMessage 代碼呼叫了 WCF 服務,而這似乎因同時呼叫過多的并發呼叫而超載。
我想知道這是實作這種節流的最佳方法嗎?下面的代碼看起來有點hacky。
var isEmpty = false;
var maxThreads = 1000;
var currentThreadCount = 0;
List<Task> taskList = new List<Task>();
while(!isEmpty)
{
var message = GetMessageFromServer();
if(!String.IsNullorEmpty(message))
{
isEmpty = true;
}
else
{
if(currentThreadCount == maxThreads)
{
task.WaitAll(tasksList.ToArray());
currentThreadCount = 0;
}
else
{
taskList.Add(Task.Run(() => ProcessMessage(message)));
}
}
}
uj5u.com熱心網友回復:
假設您對 ProcessMessage 的結果感興趣,我建議您考慮使用 Channels ( cf. )。
就您的解決方案而言,這可以改進的是,您可以確保作業量一致,并且在達到 1000 時不會停止并等待所有任務完成。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/407123.html
標籤:
上一篇:比較和交換回圈如何實作原子性?
