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). |