2

のスレッドセーフバージョンが必要ですSortedList<T,U>が、その汎用フォームとは異なり、非汎用フォームには機能がないようSynchronizedです。スレッドセーフバージョンを取得するために使用できる別のトリックはありますか?または、lock (SyncRoot)手動で使用する必要がありますか?

4

1 に答える 1

2

簡単な答え:いいえ、頼る必要はありませんlock

新しい名前空間System.Collections.Concurrentにスレッドセーフなコレクションがある場合でも、のスレッドセーフバージョンはSortedList<T, U>ありません。への各呼び出しをまたは(該当する場合)で保護する必要がある場合SortedList<T, U>、または代わりに、 (同じ方法で)のスレッドセーフラッパーを作成する必要がある場合。lockReadWriterLockSlimSortedList<T, U>Synchronized()

より長い答え:いいえ、準備はできていませんが、OrderablePartitioner<TSource>(一度に1つのアイテムを抽出するために)一緒に使用して同じ結果を達成できますConcurrentBag<T>。率直に言って、この戦略にROIがあるかどうかはわかりません。なぜなら、パーティショナーが必要ない場合は、単に複雑さを追加するだけでよいからです。

于 2012-10-10T18:35:48.623 に答える