Środowisko programistyczne: .NET 4.0 lub nowszy
Uwaga: Przestrzeń nazw System.Collections.Concurrent w ramach .NET Framework 4. Podobnie jak w dokumentacji MSDN, ConcurrentDictionary implementuje kolekcję bezpieczną w wątkach, do której może mieć dostęp wiele wątków jednocześnie. ConcurrentDictionary implementuje IDictionary<TKey, TValue> i posiada unikalne mechanizmy dodawania oraz aktualizacji klucza/wartości. (Poniżej wyjaśnienie, kiedy i jaką metodę zastosować)
Scenariusz 1: Dodaj nowy element, tylko jeśli klucz nie istnieje w słowniku... Użyj TryAdd. TryAdd akceptuje klucz i wartość dodaną do słownika, zwraca fasle, jeśli klucz nie istnieje w słowniku; Wyniki są prawdziwe, jeśli są obecne. public bool TryAdd(TKey key, TValue value)
Sytuacja 2: Zaktualizuj istniejący klucz w wartości słownika... Użyj TryUpdate. Jeśli słownik ma ten klucz i daje aktualizację warunkową, powinien podać wartość porównawczą w tej metodzie, którą można zaktualizować, gdy aktualna wartość jest równoważna wartości porównania (TValue comparisonValue). public bool TryUpdate (TKey key, TValue newValue, TValue comparisonValue)
Sytuacja 3: Do słownika należy dodać klucz/wartość; Jeśli klucz nie jest pewien, czy istnieje w słowniku; Jeśli istnieje, zaktualizuj Jeśli nie istnieje, dodaj go...
Użyj AddOrUpdate. AddOrUpdate ma dwa przeciążenia, a te dwa zwracają wartość wartości: Pierwszym przeciążonym parametrem jest AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>) Parametry to klucz i dwóch delegatów; Celem pierwszego delegata jest delegowanie, gdy klucz nie istnieje, i zwracanie wartości (wartości początkowej). Ta delegacja Func zwraca < wartość początkową, klucz>. Drugi delegat Func < zwraca Value, key, oldValue> a wykonuje pierwszego delegata, jeśli klucz nie istnieje w słowniku (jeśli istnieje, nie działa; Celem jest nadanie wartości początkowej), a następnie zwraca wartość (początkową wartość wartości); Druga delegacja to metoda zmiany wartości wartościowej, która również wymaga wartości zwrotnej (zamień początkową wartość na końcową). Func < zwraca > Value, key, oldValue publiczna TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2. Parametr drugiego przeciążenia to AddOrUpdate (TKey, TValue, Func<TKey, TValue, TValue>) Pierwszy parametr to key, drugi to sytuacja, gdy key nie istnieje, ta wartość jest początkową wartością value, a trzeci to delegate do wykonania zmiany (Func< zwraca Value, key, oldValue>). publiczna TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
Sytuacja 4: Dodaj wartość klucza do słownika, ale jeśli klucz już istnieje, usuń tę wartość; W przeciwnym razie zostanie dodana Pierwsze przeładowanie: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) Pierwszym parametrem jest klucz, drugim parametrem jest delegowany Func<value, key>, gdy klucz nie istnieje, zmienna jest przekazywana jako klucz, a wartość zmieniana. oraz utworzyć klucz i wartość, zwracając wartość wartościową.
2. Drugie przeciążenie: GetOrAdd (TKEY, TValue) Pierwszy parametr jest kluczowy, a celem drugiego parametru jest utworzenie nowej wartości danej przez klucz, gdy ten nie istnieje. Zwraca wartość. public TValue GetOrAdd(TKEY,Func<TKey, TValue>valueFactory) publiczna TValue GetOrAdd(TKEY, TValue)
Każda operacja AddOrUpdate i GetOrAdd to metoda ConcurrentDictionary do modyfikowania/zapisywania w słowniku, co zapewnia bezpieczeństwo wątków (odbywa się to w sposób bezblokowy, czyli odczyt danych ze słownika). |