具有阻止集合的批量使用者

时间:2016-10-17 20:10:42

标签: c# multithreading concurrency

我在生产者消费者模式中使用Blocking Collection。 为了加快我的程序,我必须批量生成消费者流程:处理阻止集合中的项目列表(50项),而不是一次处理一个。

所以我尝试使用queue.Take(50)代替queue.GetConsumingEnumerable()方法,但没有运气。 有没有办法做到这一点,还是应该重新考虑使用Blocking Collection?

1 个答案:

答案 0 :(得分:0)

queue.Take(50)使用LINQ Take方法(而非BlockingCollection Take方法) non 消耗可枚举,所以你最终会得到50件物品,但将它们留在收藏中。

如果您只想获得50件物品,可以使用queue.GetConsumingEnumerable().Take(50),然后您将获得50件物品并确保他们在您离开时实际上已从集合中移除。如果要在开始处理任何项目之前确保已获得所有50个项目,则需要实现查询(使用ToList或等效项)。 (这可能不会加快你的处理速度,它可能会减慢速度,但这正是你所要求的。)