【发布时间】:2009-05-27 16:54:37
【问题描述】:
我正在玩弄在 C# 中实现通用生产者/消费者对 + 处理队列的想法,以获得乐趣。这个想法是你可以只创建实现适当的 IProducer 和 IConsumer 接口(提供的默认实现)的对象,这些接口主要由委托组成,将它们传递给 QueueProcessor 类实例,告诉它你想要多少消费者,然后去。
但我对自己说,“我自己,这肯定以前做过。”
那么有谁知道 C# 中生产者/消费者模式的好、通用实现(VB.Net 也可以)?我正在寻找的基本要求:
- 对生产型和消费型(输入、排队任务和输出类型,或它们的任意组合)使用泛型
- 允许您指定有多少消费者将在队列中工作
- 允许您将多个队列链接或链接到管道中(我知道,多个消费者很棘手)
- 允许您实现自己的生产者和消费者
- 允许您将任何 IEnumerable 转换为生产者(如果我必须自己实现,可以,只要可能)
- 基于委托(您可以对基本的消费者或生产者工作使用 lambda 语法来处理单个项目)
或者如果没有,哪些陷阱阻止了它,您对如何实现它有任何想法?
【问题讨论】:
-
是的,还有 IProducerConsumerCollection
,但是当我第一次问这个问题时,这些都不存在。写一篇关于 4.0 支持的帖子,你会很容易得到我的支持。 -
啊!我不知道这是怎么一直发生的......我总是以 2 岁的帖子结束:P
-
嗨 Joel Coehoorn,请看一下使用 BlockingCollection
的 Producer-Consumer example。如果您要构建自己的 Producer-Consumer 框架,它可能对构建您的 Producer-Consumer 类很有用。
标签: c# .net multithreading producer-consumer