首页 > 解决方案 > 处理有限数量的请求,同时缓冲其余请求

问题描述

我有一个要求,我必须从流数据中进行大量的数据库调用。为了防止游泳池前托管,我不得不限制通话。经过一番研究,我想出了一个使用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. 有没有其他方法可以实现以下要求

    一个。当数据到来时将其放入队列中

    湾。检查是否有更多请求并行运行[我有这个]

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

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

我希望有一些方法,比如 Observable concurrentqueue。但我没有得到任何关于这些的信息。

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

标签: c#.netconcurrencyparallel-processingblockingcollection

解决方案


推荐阅读