处理有限数量的请求,同时缓冲其余请求

时间:2019-04-03 11:57:14

标签: c# .net concurrency parallel-processing blockingcollection

我有一个要求,我必须从流数据中进行很多数据库调用。为了防止从前托管池,我不得不保持通话限制。 经过研究,我想到了使用BlockingCollection的想法。 在将数据推送到BlockingCollection对象并使用GetConsumingEnumerable()的地方,我一直在听消息

这是完成的方式

public BlockingCollection<ModelType> dataValues = new BlockingCollection<ModelType>(boundedCapacity: _poolLimit);


public void StartBlockingCollectionListen()
{
  foreach (var data in dataValues.GetConsumingEnumerable())
  {
     if (dataValues != null)
     {
         // send out for execution 
     }
   }
}

我在应用启动时调用了StartBlockingCollectionListen函数,以便在应用启动时开始监听。

问题:

  1. 可以这样做吗? [这会影响大量数据时的性能]

  2. 还有其他方法可以实现以下要求

    a。当数据进入队列时

    b。检查是否有更多的请求正在并行运行[我有这个]

    c。如果是,则将其添加到队列

    d。否则从队列和流程中取出第一项。 [应该处理队列中的所有数据。 ]

我希望可以使用类似Observable并发队列的方法。但是我没有得到任何有关这些的信息。

任何帮助将不胜感激。 谢谢

0 个答案:

没有答案