私はWindowsフォームアプリケーション(C#)を開発していますが、プログラムの実行中はオブジェクトを作成してリストに追加します。リスト内のアイテムをFIFO(先入れ先出し)で処理する必要があります。私はbackgroundthreadでこれをしたいと思います。私はそれらを1番、2番、3番の順に処理しなければなりません。そして、アイテムがリストに追加されるとすぐに、それを処理したいと思います。だから私はそのリストをチェックする何かを持っている必要があります。ジョブのBlockingCollectionまたはQueue <T>?
これを達成する最も良い方法は何ですか?
blockingcollectionは、処理する前にアイテムが追加されるのを待つという点で、同じようなことをしています。
私はキューを持つ単一のスレッドを使用することができます(真)とアイテムがあればそれを取る?
あなたはどう思いますか?
はい、正確です! – syncis
@Jonathan Beerhalter:または、「Take」を呼び出す代わりに、バックグラウンドスレッドで[forex'を[GetConsumingEnumerable']にするだけでよいのですが、これは私の考えを確認するものです。 (http://msdn.microsoft.com/en-us/library/dd287186.aspx)、 'BlockingCollection'に配置されているアイテムを生成します。 –
casperOne
@ sync: 'GetConsumingEnumerable'は' Take'のように 'BlockingCollection'に項目が追加されるまでブロックします。問題は、あなたのバックグラウンドスレッドはこれらのアイテムを処理する以外に何をしているのですか?スレッドを保存しようとしている場合。基本的にスレッドプールを書き直しているのですが、それは一般的には良い考えではありません。あなたのアイテムを1つずつ処理している間に、より多くのアイテムが 'Take'のために来るか、GetConsumingEnumerableによって生成されることに注意してください(必要に応じて、他のスレッドで処理するアイテムを送ることができます)。 –
casperOne