Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 58026|Odpoveď: 2

[Zdroj] ConcurrentDictionary podporuje nové a aktualizované aktualizácie

[Kopírovať odkaz]
Zverejnené 13. 7. 2016 11:12:05 | | |
Vývojové prostredie: .NET 4.0 alebo novšie

Poznámka:
Menný priestor System.Collections.Concurrent v rámci .NET Framework 4.
Rovnako ako v dokumentácii MSDN, ConcurrentDictionary implementuje kolekciu bezpečnú pre vlákna, ku ktorej môže pristupovať viacero vlákien súčasne.
ConcurrentDictionary implementuje IDictionary<TKey, TValue> a má niekoľko unikátnych mechanizmov na pridávanie, aktualizáciu kľúča/hodnoty. (Nižšie je vysvetlenie, kedy a akú metódu použiť)

Scenár 1: Pridaj novú položku, len ak kľúč v slovníku neexistuje...
Použite TryAdd. TryAdd prijíma kľúč a hodnotu pridanú do slovníka, vracia fasle, ak kľúč v slovníku neexistuje; Ak sú prítomné, výsledky sú pravdivé.
public bool TryAdd(TKey key, TValue value)

Situácia 2: Aktualizujte existujúci kľúč v hodnote slovníka...
Použite TryUpdate. Ak slovník má tento kľúč a poskytuje podmienenú aktualizáciu, mal by v tejto metóde poskytnúť porovnávaciu hodnotu, ktorú možno aktualizovať, keď je aktuálna hodnota ekvivalentná hodnote porovnania (TValue comparisonValue).
public bool TryUpdate (TKey key, TValue newValue, TValue comparisonValue)


Situácia 3: Do slovníka je potrebné pridať kľúč/hodnotu; Ak kľúč nie je istý, či existuje v slovníku; Ak existuje, aktualizuj Ak neexistuje, pridaj to...

Použi AddOrUpdate. AddOrUpdate má dve preťaženia a tieto dve preťaženia vracajú hodnotu hodnoty:
Prvý preťažený parameter je AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
Parametre sú Kľúč a dvaja delegáti; Účelom prvého delegáta je delegovať, keď kľúč neexistuje, a vrátiť hodnotu (počiatočnú hodnotu). Táto delegačná funkcia vracia < počiatočnú hodnotu, kľúč>.
Druhý delegát Func < vráti Value, key, oldValue> a vykoná prvého delegáta, ak kľúč v slovníku neexistuje (ak existuje, nespustí sa; Účelom je dať hodnote počiatočnú hodnotu), a potom vráti hodnotu (počiatočnú hodnotu hodnoty); Druhá delegácia je metóda na zmenu hodnoty, ktorá tiež vyžaduje návratovú hodnotu (zmena počiatočnej hodnoty na konečnú). Func < vrátiť > Value, key, oldValue
public TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)

                 2. Parameter druhého preťaženia je AddOrUpdate (TKey, TValue, Func<TKey, TValue, TValue>)
Prvý parameter je key, druhý je, keď kľúč neexistuje, táto hodnota je počiatočná hodnota value, a tretí je delegát, ktorý vykoná zmenu (Func< vráti Value, key, oldValue>).
                      public TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)

Situácia 4: Pridaj hodnotu kľúča do slovníka, ale ak kľúč už existuje, odstráni sa hodnota; Inak bude pridaná
Prvé preťaženie: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory)
Prvým parametrom je kľúč, druhým parametrom je delegovaná funkcia<hodnota, kľúč>, keď kľúč neexistuje, premenná sa odovzdá ako kľúč a hodnota sa zmení. a vytvoriť kľúč a hodnotu, pričom vráti hodnotovú hodnotu.

       2. Druhé preťaženie: GetOrAdd (TKEY, TValue)
Prvý parameter je kľúčový a účelom druhého parametra je vytvoriť novú hodnotu danú kľúčom, keď neexistuje. Vráti hodnotu.
public TValue GetOrAdd(TKEY,Func<TKey, TValue>valueFactory)
public TValue GetOrAdd(TKEY, TValue)


Každá operácia AddOrUpdate a GetOrAdd je metóda, ktorú má ConcurrentDictionary na úpravu/zápis do slovníka, čím sa zabezpečuje bezpečnosť vlákien (vykonáva sa to bez uzamknutia, teda čítaním dát zo slovníka).




Predchádzajúci:LINQ multi-podmienečný dotaz, kde je konštruovaná podmienka
Budúci:Okná pod základnými operačnými príkazmi Memcached
 Prenajímateľ| Zverejnené 13. 9. 2016 13:33:25 |
ConcurrentDictionary vs. Dictionary+Locking - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Zdroj: Code Agriculture Network)
 Prenajímateľ| Zverejnené 23. 3. 2021 11:32:18 |
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com