Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 58026|Răspunde: 2

[Sursă] ConcurrentDictionary suportă actualizări noi și actualizate

[Copiază linkul]
Postat pe 13.07.2016 11:12:05 | | |
Mediul de dezvoltare: .NET 4.0 sau mai înalt

Notă:
Spațiul de nume System.Collections.Concurrent din .NET Framework 4.
Ca și în documentația MSDN, ConcurrentDictionary implementează o colecție thread-safe care poate fi accesată simultan de mai multe fire de execuție.
ConcurrentDictionary implementează IDictionary<TKey, TValue> și are unele mecanisme unice pentru adunarea și actualizarea chei/valori. (Mai jos este o explicație despre când și ce metodă să folosești)

Scenariul 1: Adaugă un nou element, doar dacă cheia nu există în dicționar...
Folosește TryAdd. TryAdd acceptă cheia și valoarea adăugate dicționarului, returnează Fasle dacă cheia nu există în dicționar; Returnările sunt adevărate dacă sunt prezente.
public bool TryAdd(cheia TKey, valoarea TValue)

Situația 2: Actualizarea cheii existente din Value... din dicționar.
Folosește TryUpdate. Dacă dicționarul are această cheie și oferă o actualizare condiționată, ar trebui să ofere o valoare de comparație în această metodă care poate fi actualizată atunci când valoarea curentă este echivalentă cu valoarea de comparație (TValue comparisonValue).
public bool TryUpdate (TKey key, TValue newValue, TValue comparisonValue)


Situația 3: Trebuie adăugată o cheie/valoare dicționarului; Dacă cheia nu este sigură dacă există în dicționar; Dacă există, actualizare Dacă nu există, adaugă-l...

Folosește AddOrUpdate. AddOrUpdate are două suprasarcini, iar cele două returnează valoarea valorii:
Primul parametru suprasolicitat este AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
Parametrii sunt Key și doi delegați; Scopul primului delegat este să delege atunci când cheia nu există și să returneze valoarea (valoarea inițială). Această funcție de delegare returnează <valoarea inițială, cheia>.
Al doilea delegat Func < returnează Value, key, oldValue> și execută primul delegat dacă cheia nu există în dicționar (dacă există, nu rulează; Scopul este de a da valorii valoarea inițială), iar apoi va returna valoarea (valoarea inițială a valorii); A doua delegare este o metodă de schimbare a valorii, care necesită de asemenea returnarea valorii (schimbarea valorii inițiale cu cea finală). Func < returna > Value, key, oldValue
public TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)

                 2. Parametrul celei de-a doua suprasarcini este AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
Primul parametru este cheia, al doilea este când cheia nu există, această valoare este valoarea inițială a valorii, iar al treilea este delegatul pentru a executa schimbarea (Func< returnează Value, key, oldValue>).
                      Public TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)

Situația 4: Adaugă valoarea cheii în dicționar, dar dacă cheia există deja, elimină valoarea; Altfel, va fi adăugat
Prima suprasolicitare: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory)
Primul parametru este cheia, al doilea parametru este delegat Func<valoare, cheie>, iar când cheia nu există, o variabilă este transmisă ca cheie, iar valoarea este schimbată. și creează o cheie și o valoare, returnând o valoare valoroasă.

       2. A doua suprasarcină: GetOrAdd (TKEY, TValue)
Primul parametru este cheia, iar scopul celui de-al doilea parametru este de a crea o valoare nouă dată de cheie atunci când aceasta nu există. Returnează valoare.
public TValue Getor Add(TKEY, Func<TKey, TValue>valueFactory)
TValue GetOr Add(TKEY, TValue)


Fiecare operațiune a AddOrUpdate și GetOrAdd este o metodă pe care ConcurrentDictionary o are pentru modificare/scriere în dicționar, ceea ce asigură siguranța firului de execuție (se face fără blocare, citind datele din dicționar).




Precedent:Interogare multicondițională LINQ unde este construită condiția
Următor:Ferestre de sub comenzile de operație de bază Memcached
 Proprietarul| Postat pe 13.09.2016 13:33:25 |
ConcurrentDictionary vs. Dictionary+Locking - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Sursa: Code Agriculture Network)
 Proprietarul| Postat pe 23.03.2021 11:32:18 |
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com