Какая многопоточная коллекция в .Net Framework имеет «Contains» в качестве одного из своих API? - PullRequest
4 голосов
/ 12 апреля 2011

Я знаю, что у ConcurrentDictionary есть API-интерфейс под названием ContainsKey, но словарь - это не то, что я ищу. Сейчас я использую метод расширения «Содержит» из Enumerable, но этот метод не является потокобезопасным. Так есть ли в поточно-ориентированной коллекции метод «Contains»?

Спасибо.

1 Ответ

15 голосов
/ 12 апреля 2011

В общем случае операция Contains не очень полезна в параллельной коллекции.Проблема заключается в том, что, как только вы определите, что коллекция «содержит» или не содержит какой-либо объект, логика, которую вы выполняете в результате этой проверки, больше не действительна, так как другой поток мог добавить или удалить элемент, следующий сразу за ним..

Класс ConcurrentDictionary содержит этот метод для реализации IDictionary, но фактически предполагается использовать AddOrUpdate, GetOrAdd и подобные атомарные методы.

...