当BlockingCollection<MyItem>
花费太多时间从.Take()
电话中醒来时,我遇到了问题。
场景是这样的:
我有一个线程,可以非常快速地将数据推送到BlockingCollection
(实际上在XUnit中我做了for
循环。我有一个3 Task
,只是坐在.Take()
呼叫并等待从输出中我可以看到,在第一次Task
唤醒并实际从BlockingCollection
收集数据之前,已将近200项(最多1秒或更多)添加到集合中。
我有多个基于BlockingCollection
的“缓冲区”以流水线方式组织,并且所有这些“缓冲区”在.Take()
操作时都会受到太多时间的影响。
我尝试.TryTake()
和.GetConsumingEnumerable()
的结果相同。
这个想法在这个管道的最后我有一个一个线程化的慢速函数,它逐个处理项目,处理单个项目可能需要一段时间。 我只需要确保'item'从“缓冲区”传递到“缓冲区”非常快(一旦插入第一个“缓冲区”)
我只需要确保启动时间(.Take()
或.TryTake()
等)将在项目添加到集合时接近发生