コレクションと同時に動作する必要がある複数のスレッドがある場合、通常は の下のコレクションを使用しSystem.Collections.Concurrent
ます。
ただし、これらのコレクションは、非並行コレクションに比べて高価です。場合によっては、それらを非並行コレクションに安全に置き換えることができるかどうか疑問に思います。
たとえば、最初にデータを入力するディクショナリがあり、後でそれから読み取るか、キーが存在するかどうかを確認するだけで書き込みや変更を行わないいくつかのスレッド (またはタスク) を生成するとします。
そのようなシナリオでは、 を使用しても安全ですかDictionary<TKey, TValue>
、それとも を使用する必要がありますConcurrentDictionary<TKey, TValue>
か?
また、一般的なケースでは、コレクションが変更されない限り、すべての標準コレクションが複数のリーダーをサポートしていると想定できますか?