通用.Net制作人/消费者

我想要在C#中实现通用的生产者/消费者对+处理队列以获得乐趣。 我们的想法是你可以创建实现适当的IProducer和IConsumer接口(提供默认实现)的对象,它们主要由委托组成,将它们传递给QueueProcessor类实例,告诉它你想要多少个消费者,然后去。

但我对自己说,“自我,这肯定已经做过了。”

那么有没有人知道C#中生产者/消费者模式的良好 通用实现(VB.Net也可以)? 我正在寻找的基本要求:

  • 对生成和使用的类型(输入,排队任务和输出类型或其任何组合)使用generics
  • 允许您指定将为队列工作的消费者数量
  • 允许您将多个队列链接或链接到管道中(对于多个消费者来说很棘手,我知道)
  • 允许您实施自己的生产者和消费者
  • 允许你将任何IEnumerable转换为生产者(好吧,如果我必须自己实现,只要它可能)
  • 基于委托(您可以使用lambda语法为基本消费者或生产者工作处理单个项目)

或者如果没有,那么什么陷阱阻止了它,你对如何实现它有任何想法吗?

Microsoft CCR包含您需要的大部分内容。

以下是一些代码示例和使用说明。

Marc Gravell在这个答案中写了一个很好的阻塞队列示例。

你看过MiscUtil吗?