2009-05-27 14 views
8

私は、一般的なプロデューサ/コンシューマのペア+ Cのキューを処理するという考えを楽しみにしています。アイデアは、適切なIProducerインターフェイスとIConsumerインターフェイス(実装されている既定の実装)を実装するオブジェクトを作成するだけです。これは主にデリゲートで構成され、QueueProcessorクラスインスタンスに渡し、消費者の数を指定して移動します。汎用.Netプロデューサ/コンシューマ

しかし、私は自分自身に言う、 "自己、確かにこれは前に行われている。"

だから、誰もが(VB.Netがあまりにも、大丈夫です)C#でのプロデューサ/コンシューマパターンの良いジェネリック実装を知っていますか?私が探している基本的な要件:

  • 使用の生産と消費のタイプのジェネリック
  • は、あなたがどのように機能するか、多くの消費者指定を許可(入力は、タスク、および出力タイプ、またはそれらの任意の組み合わせをキューに入れられました)キュー
  • は(私が知っている、複数の消費者とのトリッキー)あなたがパイプラインに複数のキューをリンクまたはチェーンを許可
  • では、独自の生産者と消費者
  • を実装することを可能にする(あなたがプロデューサーに任意のIEnumerableををオンにすることを許可します私がそれを自分で実装しなければならない場合は大丈夫です可能ベース)
  • デリゲート(あなたは、単一のアイテムを処理するために、基本的な消費者や生産者の作業のためのラムダ構文を使用することができます)

がない場合は、どのような落とし穴がそれを妨げていると、あなたは上の任意の考えを持っていますそれを実装する方法は?

+0

http://msdn.microsoft.com/en-us/library/dd267312.aspxを見ましたか? – porges

+0

はい、IProducerConsumerCollection ですが、私が最初に質問したときはまだ存在しませんでした。 4.0でのサポートについての投稿を書くと、簡単なupvoteが私から手に入ります。 –

+0

Argh!私はこれがどうやって起こっているのかわかりません...私はいつも2歳のポストに終わっています:P – porges

答えて

5

Microsoft CCR多くのものが必要です。

Hereは、いくつかのコードサンプルと使用上の注意です。

+0

私は_knew_これは既にどこかにあった。 –

+0

これは完璧なフレームワークではありませんが、処理を停止する機能や残りのタスクを待機させる機能などの欠点があります。 さらに詳しい情報が必要な場合は、開発チームのフレームワークを強化しています... – ripper234

0

MiscUtilを見ましたか?

+0

私はそこに私が求めていることは何も見ません。 –

+0

そこには、これを実装するのに非常に役立ついくつかのものは見えませんでした。 –

+0

だから、あなたはそこにあなたのインプラント内で何かエンハンサメントを置くでしょう...:P –

2

Marc Gravellは、this answerにniceブロッキングキューを作成しました。