拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 在while回圈中限制创建的任务的正确方法

在while回圈中限制创建的任务的正确方法

白鹭 - 2022-02-23 2107 0 0

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

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *