通用的.Net生产者/消费者

8
我正在考虑在C#中实现一个通用的生产者/消费者对+处理队列,以供娱乐。这个想法是你可以创建实现适当的IProducer和IConsumer接口的对象(提供默认实现),这些接口主要由委托组成,将它们传递给QueueProcessor类实例,告诉它你想要多少个消费者,然后开始运行。
但我对自己说:“自己啊,肯定有人做过这个了。”
那么,有没有人知道在C#(VB.Net也可以)中有一个好的、通用的生产者/消费者模式的实现呢?我正在寻找的基本要求包括:
  • 使用泛型来生产和消费类型(输入、排队任务和输出类型或任何组合)
  • 允许您指定多少个消费者会处理队列
  • 允许您将多个队列连接或链接成一个管道(多个消费者比较棘手)
  • 允许您实现自己的生产者和消费者
  • 允许您将任何IEnumerable转换为生产者(如果我必须自己实现,那也可以)
  • 基于委托(可以使用lambda语法来处理单个项目的基本消费者或生产者工作)
如果没有这样的实现,有哪些障碍阻碍了它的实现?您对如何实现它有什么想法吗?

你看过 http://msdn.microsoft.com/en-us/library/dd267312.aspx 吗? - porges
是的,还有IProducerConsumerCollection<T>,但当我第一次提出这个问题时,这些都还不存在。写一篇关于4.0支持的文章,你会得到我的简单点赞。 - Joel Coehoorn
啊!我不知道这是怎么发生的...我总是最终看到两年前的帖子 :P - porges
嗨,Joel Coehoorn,请看一下这个生产者-消费者示例,它使用了BlockingCollection<T>。如果您打算构建自己的生产者-消费者框架,它可能对您有用。 - sɐunıɔןɐqɐp
3个回答

5

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

这里 有一些代码示例和使用说明。


虽然它不是一个完美的框架,但缺少一些明显的功能,比如停止处理并等待剩余任务的能力。我们正在我们的开发团队中增强这个框架,如果你需要更多帮助,请让我知道... - ripper234

2

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


0

我没有看到那里有任何东西可以做我要求的事情。 - Joel Coehoorn
虽然我看到了一些非常有用的东西可以用来实现这个,但并不是说我没有看到。 - Joel Coehoorn
那么你将会把你所做的任何增强功能及时地放到你的实现中... :P - Ruben Bartelink

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接