我有一个要求,我必须从流数据中进行很多数据库调用。为了防止从前托管池,我不得不保持通话限制。
经过研究,我想到了使用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函数,以便在应用启动时开始监听。
问题:
可以这样做吗? [这会影响大量数据时的性能]
还有其他方法可以实现以下要求
a。当数据进入队列时
b。检查是否有更多的请求正在并行运行[我有这个]
c。如果是,则将其添加到队列
d。否则从队列和流程中取出第一项。 [应该处理队列中的所有数据。 ]我希望可以使用类似Observable并发队列的方法。但是我没有得到任何有关这些的信息。
任何帮助将不胜感激。 谢谢