BlockingCollection需要花费太多时间才能醒来

时间:2015-05-25 10:02:20

标签: c# multithreading producer-consumer blockingcollection

BlockingCollection<MyItem>花费太多时间从.Take()电话中醒来时,我遇到了问题。

场景是这样的: 我有一个线程,可以非常快速地将数据推送到BlockingCollection(实际上在XUnit中我做了for循环。我有一个3 Task,只是坐在.Take()呼叫并等待从输出中我可以看到,在第一次Task唤醒并实际从BlockingCollection收集数据之前,已将近200项(最多1秒或更多)添加到集合中。

我有多个基于BlockingCollection的“缓冲区”以流水线方式组织,并且所有这些“缓冲区”在.Take()操作时都会受到太多时间的影响。

我尝试.TryTake().GetConsumingEnumerable()的结果相同。

这个想法在这个管道的最后我有一个一个线程化的慢速函数,它逐个处理项目,处理单个项目可能需要一段时间。 我只需要确保'item'从“缓冲区”传递到“缓冲区”非常快(一旦插入第一个“缓冲区”)

我只需要确保启动时间(.Take().TryTake()等)将在项目添加到集合时接近发生

0 个答案:

没有答案