5
私は繰り返し要素と同時BlockingCollection
を持っています。それを変更して別個の要素を追加または取得するにはどうすればよいですか? BlockingCollection
ため同時コレクションとユニークな要素
私は繰り返し要素と同時BlockingCollection
を持っています。それを変更して別個の要素を追加または取得するにはどうすればよいですか? BlockingCollection
ため同時コレクションとユニークな要素
デフォルトのバッキングストアはConcurrentQueue
です。他の人が指摘しているように、それを使って別個のアイテムを追加するのはむしろ困難です。
ただし、IProducerConsumerCollection
を実装する独自のコレクションタイプを作成し、BlockingCollection
コンストラクタに渡すことができます。
は、キューに現在ある項目のキーが含まれConcurrentDictionary
を想像してみてください。アイテムを追加するには、最初にTryAdd
を辞書に追加し、アイテムが辞書にない場合は追加してキューに追加します。 Take
(およびTryTake
)は、キューから次の項目を取得し、辞書から削除して戻ります。
HashTable
が並行していたら好きですが、1つではないので、ConcurrentDictionary
とする必要があります。
の別個の要素を追加[驚くべきハード](http://stackoverflow.com/questions/6603969/how-to-access-the-underlying-default-concurrent-queue-of-a-blocking-collection)であるように見えます不可能ではないとしても。 'BlockingCollection'は' IEnumerable 'を実装しているので、あなたは' Distinct() 'を使うことができます。 –
GertArnoldによってリンクされたStackOverflow質問で提供されているコードを使用できますが、IProducerConsumerCollectionのTryAddおよびTryTake実装ではtrueを返します。これはうまくいくでしょう。私はそれがひどいフォームであることは知っていますが、動作する必要があり、BlockingCollectionは既に例外をスローするという形でフォームを破っています。どのようにひどく迷惑。 – Kevek