Razvojno okolje: .NET 4.0 ali novejši
Opomba: Imenski prostor System.Collections.Concurrent znotraj .NET Framework 4. Tako kot v dokumentaciji MSDN ConcurrentDictionary implementira zbirko, varno za niti, do katere lahko dostopa več niti hkrati. ConcurrentDictionary implementira IDictionary<TKey, TValue> in ima nekaj edinstvenih mehanizmov za dodajanje in posodabljanje ključa/vrednosti. (Spodaj je razlaga, kdaj in katero metodo uporabiti)
Scenarij 1: Dodajte nov element, le če ključ v slovarju ne obstaja... Uporabi TryAdd. TryAdd sprejme ključ in vrednost, dodano slovarju, vrne fasle, če ključ v slovarju ne obstaja; Če je prisoten, so rezultati resnični. javni bool TryAdd(TKey ključ, TValue vrednost)
Situacija 2: Posodobi obstoječi ključ v vrednosti slovarja... Uporabi TryUpdate. Če ima slovar ta ključ in daje pogojno posodobitev, bi moral dati primerjalno vrednost v tej metodi, ki jo je mogoče posodobiti, ko je trenutna vrednost enakovredna primerjavi (TValue comparisonValue). javni bool TryUpdate(TKey ključ, TValue newValue, TValue primerjalna vrednost)
Situacija 3: V slovar je treba dodati ključ/vrednost; Če ključ ni prepričan, ali obstaja v slovarju; Če obstaja, posodobi Če ne obstaja, dodaj...
Uporabi AddOrUpdate. AddOrUpdate ima dve preobremenitvi, pri čemer ti dve preobremenitvi vrneta vrednost vrednosti: Prvi preobremenjen parameter je AddOrUpdate (TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>) Parametri so ključ in dva delegata; Namen prvega delegata je delegirati, kadar ključ ne obstaja, in vrniti vrednost (začetno vrednost). Ta delegacijski Func vrne < začetno vrednost, ključ>. Drugi delegat Func < vrne Value, key, oldValue in izvede prvega delegata> če ključ v slovarju ne obstaja (če obstaja, se ne zažene; Namen je, da vrednost dobi začetno vrednost), nato pa vrne vrednost (začetno vrednost vrednosti); Druga delegacija je metoda za spreminjanje vrednosti, ki prav tako zahteva povratno vrednost (spremenite začetno vrednost v končno). Func < vrne > Value, key, oldValue javni TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2. Parameter druge preobremenitve je AddOrUpdate (TKey, TValue, Func<TKey, TValue, TValue>) Prvi parameter je ključ, drugi je, ko ključ ne obstaja, ta vrednost je začetna vrednost vrednosti, tretji pa je delegat za izvedbo spremembe (Func< vrne Value, key, oldValue>). javni TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
Situacija 4: Dodajte vrednost ključa v slovar, če pa ključ že obstaja, odstranite vrednost; V nasprotnem primeru bo dodana Prva preobremenitev: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) Prvi parameter je ključ, drugi parameter je delegirani Func<vrednost, ključ>, ko ključ ne obstaja, se kot ključ prenese spremenljivka, vrednost pa se spremeni. ter ustvari ključ in vrednost, vrneta vrednost.
2. Druga preobremenitev: GetOrAdd (TKEY, TValue) Prvi parameter je ključ, namen drugega parametra pa je ustvariti novo vrednost, ki jo določi ključ, kadar ta ne obstaja. Prinese vrednost. javni TValue GetOrAdd(TKEY,Func<TKey, TValue>valueFactory) javni TValue GetOrAdd(TKEY, TValue)
Vsaka operacija AddOrUpdate in GetOrAdd je metoda, ki jo ima ConcurrentDictionary za spreminjanje/pisanje v slovar, kar zagotavlja varnost niti (izvaja se na način brez zaklepanja, torej bere podatke v slovarju). |