1

我有一个问题是从电话BlockingCollection<MyItem>中醒来需要太多时间。.Take()

场景是这样的:我有一个线程可以BlockingCollection非常快地推送数据(实际上在 XUnit 中我做了一个for循环。我有一个 3Task只是坐在.Take()通话中等待添加项目。从输出中我可以看到将近 200 个项目(最多 1 秒或更长时间)在第一次Task醒来并实际从BlockingCollection.

我有多个基于以管道方式组织的“缓冲区”,并且所有这些缓冲区都因动作BlockingCollection唤醒时间过长而受到影响。.Take()

我试过了.TryTake().GetConsumingEnumerable()结果相同。

在这个管道的末端,我有一个单线程的慢速函数,可以一个一个地处理项目,并且处理单个项目可能需要未知的时间。我只需要确保“项目”非常快地从“缓冲区”传递到“缓冲区”(一旦它被插入第一个“缓冲区”)

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

4

0 回答 0