0

ブロッキングスレッド セーフ操作をサポートする並行コレクションが必要Takeですが、実際に取得されるアイテムは条件を満たすアイテムです。

何かのようなもの:

private TheBlockingCollection<MyClass> _myCollection;

MyClass myItem = _myCollection.TakeItemWhere(item => item.Type.equals(something));

最終的な目標は、現在コレクションに存在するプロパティ値が最も高いアイテムを取得することです。例 - マックス

そのような組み込みのコレクションはありますか?

そうでない場合、より良い代替手段は何ですか?

4

1 に答える 1

2

上記のコメントでServyが言及しているように、BlockingCollectionでPriority Queueを使用する必要があります。

コレクションに格納されている型に適切なIComparable<>インターフェイスを実装すると、アイテムをキューから取り出すときに、定義した比較インターフェイスに従って最初のアイテムが自動的に取得されます。

Microsoft はConcurrentPriorityQueueIProducerConsumerCollection、BlockingCollection で使用できる実装のサンプルを提供しています。

最初に a のインスタンスを作成しConcurrentPriorityQueue、次に a を受け入れるコンストラクターの 1 つを使用して BlockingCollection を作成することによって使用しIProducerConsumerCollection<T>ます

ConcurrentPriortyQueueをそのコンストラクターに渡すだけです。

于 2013-08-15T14:50:56.697 に答える