Wiem, że ConcurrentDictionary ma API o nazwieZawiera klucz, ale słownik nie jest tym, czego szukam. Na razie używam metody "Contains" z Enumerable, ale ta metoda nie jest bezpieczna dla wątków. Czy istnieje kolekcja bezpieczna dla wątków z metodą "zawiera"?
Dzięki.
Odpowiedzi:
15 dla odpowiedzi № 1Ogólnie rzecz biorąc, a Contains
operacja nie jest zbyt przydatna w przypadku współbieżnościkolekcja. Problem polega na tym, że gdy tylko określisz, że kolekcja zawiera lub nie zawiera jakiegoś obiektu, logika, którą wykonujesz w wyniku tego sprawdzenia, nie jest już ważna, ponieważ inny wątek mógł dodać lub usunąć element bezpośrednio po nim. .
Klasa ConcurrentDictionary zawiera tę metodę implementacji IDictionary, ale zamierzone użycie jest właściwie użyteczne AddOrUpdate
, GetOrAdd
i podobne metody atomowe.