我有一个问题是从电话BlockingCollection<MyItem>
中醒来需要太多时间。.Take()
场景是这样的:我有一个线程可以BlockingCollection
非常快地推送数据(实际上在 XUnit 中我做了一个for
循环。我有一个 3Task
只是坐在.Take()
通话中等待添加项目。从输出中我可以看到将近 200 个项目(最多 1 秒或更长时间)在第一次Task
醒来并实际从BlockingCollection
.
我有多个基于以管道方式组织的“缓冲区”,并且所有这些缓冲区都因动作BlockingCollection
唤醒时间过长而受到影响。.Take()
我试过了.TryTake()
,.GetConsumingEnumerable()
结果相同。
在这个管道的末端,我有一个单线程的慢速函数,可以一个一个地处理项目,并且处理单个项目可能需要未知的时间。我只需要确保“项目”非常快地从“缓冲区”传递到“缓冲区”(一旦它被插入第一个“缓冲区”)
我只需要确保启动时间(.Take()
或.TryTake()
等)将在项目添加到集合时接近时间发生