【问题标题】:Generic .Net Producer/Consumer通用 .Net 生产者/消费者
【发布时间】:2009-05-27 16:54:37
【问题描述】:

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

但我对自己说,“我自己,这肯定以前做过。”

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

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

或者如果没有,哪些陷阱阻止了它,您对如何实现它有任何想法?

【问题讨论】:

  • 是的,还有 IProducerConsumerCollection,但是当我第一次问这个问题时,这些都不存在。写一篇关于 4.0 支持的帖子,你会很容易得到我的支持。
  • 啊!我不知道这是怎么一直发生的......我总是以 2 岁的帖子结束:P
  • 嗨 Joel Coehoorn,请看一下使用 BlockingCollectionProducer-Consumer example。如果您要构建自己的 Producer-Consumer 框架,它可能对构建您的 Producer-Consumer 类很有用。

标签: c# .net multithreading producer-consumer


【解决方案1】:

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

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

【讨论】:

  • 虽然它不是一个完美的框架,但缺乏一些明显的东西,比如停止处理和等待剩余任务的能力。我们正在改进我们开发团队的框架,如果您需要更多帮助,请告诉我...
【解决方案2】:

Marc Gravell 在this answer 中写了一个很好的阻塞队列示例。

【讨论】:

    【解决方案3】:

    你看过MiscUtil吗?

    【讨论】:

    • 我没有看到任何符合我要求的东西。
    • 并不是说我没有看到其中的一些东西对实现这一点非常有用。
    • 所以你会及时将你在你的 impl 中所做的任何增强功能放在那里......:P
    猜你喜欢
    • 2011-07-27
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多