我有一个等待讯息到达队列的侦听器。我想限制任务的数量,以便对于队列中的每 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 时不会停止并等待所有任务完成。
0 评论