【发布时间】:2022-01-10 05:53:52
【问题描述】:
我有一个等待消息到达队列的侦听器。我想限制任务的数量,以便对于队列中的每 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)));
}
}
}
【问题讨论】:
-
如果您发布真实代码会很棒。您问题中的代码有太多语法错误,无法实现。
标签: c# multithreading concurrency task task-parallel-library