我在生产者消费者模式中使用Blocking Collection。 为了加快我的程序,我必须批量生成消费者流程:处理阻止集合中的项目列表(50项),而不是一次处理一个。
所以我尝试使用queue.Take(50)
代替queue.GetConsumingEnumerable()
方法,但没有运气。
有没有办法做到这一点,还是应该重新考虑使用Blocking Collection?
答案 0 :(得分:0)
写queue.Take(50)
使用LINQ Take
方法(而非BlockingCollection
Take
方法) non 消耗可枚举,所以你最终会得到50件物品,但将它们留在收藏中。
如果您只想获得50件物品,可以使用queue.GetConsumingEnumerable().Take(50)
,然后您将获得50件物品并确保他们在您离开时实际上已从集合中移除。如果要在开始处理任何项目之前确保已获得所有50个项目,则需要实现查询(使用ToList
或等效项)。 (这可能不会加快你的处理速度,它可能会减慢速度,但这正是你所要求的。)