Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 58026|Odpowiedź: 2

[Źródło] ConcurrentDictionary obsługuje nowe i zaktualizowane aktualizacje

[Skopiuj link]
Opublikowano 13.07.2016 11:12:05 | | |
Ś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).




Poprzedni:LINQ wielowarunkowe zapytanie, gdzie konstruowany jest warunek
Następny:Okna poniżej podstawowych poleceń operacyjnych w pamięci podręcznej
 Ziemianin| Opublikowano 13.09.2016 13:33:25 |
ConcurrentDictionary vs. Dictionary+Locking - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Źródło: Code Agriculture Network)
 Ziemianin| Opublikowano 23.03.2021 11:32:18 |
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com