Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 58026|Odgovoriti: 2

[Vir] ConcurrentDictionary podpira nove in posodobljene posodobitve

[Kopiraj povezavo]
Objavljeno na 13. 07. 2016 11:12:05 | | |
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).




Prejšnji:LINQ večpogojna poizvedba tam, kjer je pogoj konstruiran
Naslednji:Okna pod osnovnimi ukazi za upravljanje v Memcached
 Najemodajalec| Objavljeno na 13. 09. 2016 13:33:25 |
ConcurrentDictionary proti Dictionary+Locking - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Vir: Code Agriculture Network)
 Najemodajalec| Objavljeno na 23. 03. 2021 11:32:18 |
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com