Fejlesztési környezet: .NET 4.0 vagy magasabb
Megjegyzés: A System.Collections.Concurrent névtér a .NET Framework 4-en belül. Ahogy az MSDN dokumentációjában, a ConcurrentDictionary is egy szál-biztonságos gyűjteményt valósít meg, amelyhez több szál egyszerre érhető el. A ConcurrentDictionary IDictionary<TKey, TValue> implementálja, és egyedi mechanizmusokkal rendelkezik kulcs/érték hozzáadására, frissítésére. (Az alábbiakban bemutatjuk, mikor és milyen módszert kell alkalmazni)
1. forgatókönyv: Új elem hozzáadása, csak akkor, ha a kulcs nincs a szótárban... Használd a TryAdd-et. A TryAdd elfogadja a kulcsot és a szótárhoz hozzáadott értéket, visszaadja a fasle-t, ha a kulcs nincs a szótárban; Ha van igaz, akkor igaz visszajelzés. public bool TryAdd(TKey kulcs, TValue érték)
2. helyzet: Frissítsd a meglévő kulcsot a szótár Értékében... Használd a TryUpdate-et. Ha a szótár rendelkezik ezzel a kulcsmal és feltételes frissítést ad, akkor ebben a módszerben egy összehasonlító értéket kell adnia, amelyet akkor lehet frissíteni, amikor az aktuális érték ekvivalens az összehasonlító értékkel (TValue comparisonValue). public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)
3. helyzet: Kulcsot/értéket kell hozzáadni a szótárba; Ha a kulcs nem biztos benne, hogy létezik-e a szótárban; Ha létezik, frissítsd Ha nem létezik, add fel...
Használd az AddOrUpdate-et. Az AddOrUpdate-nek két túlterhelése van, és ezek a túlterhelések visszaadják az értékértéket: Az első túlterhelt paraméter az AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>) A paraméterek: Kulcs és két delegált; Az első delegált célja, hogy delegálja, amikor a kulcs nem létezik, és visszaadja az értéket (kezdeti érték). Ez a delegáció Func < kezdeti értéket, kulcsot > ad. A második delegált Func < visszaadja az értéket, kulcsot, oldValue-t> és végrehajtja az első delegáltot, ha a kulcs nem létezik a szótárban (ha létezik, akkor nem fut; A cél az, hogy az értéknek megadja a kezdeti értéket), majd visszaadja az értéket (az érték kezdeti értékét); A második delegáció egy módszer az értékérték megváltoztatására, amely szintén megköveteli a visszatérési értéket (az eredeti érték végleges értékre történő módosítását). Func < visszaadja a > Érték, kulcs, oldValue public TValue AddOrUpdate (TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2. A második túlterhelés paramétere: AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>) Az első paraméter kulcs, a második az, amikor a kulcs nem létezik, ez az érték az érték kezdeti értéke, a harmadik pedig az delegált, hogy végrehajtsa a változást (Func< Value, key, oldValue> visszaadja). public TValue AddOrUpdate (TKey, TValue, Func<TKey, TValue, TValue>)
4. helyzet: Add hozzá a kulcs értékét a szótárhoz, de ha a kulcs már létezik, vegyük ki az értéket; Ellenkező esetben hozzáadják Első túlterhelés: GetOrAdd (TKEY, Func<TKey, TValue>valueFactory) Az első paraméter kulcs, a második paraméter Func<érték, kulcs> alárendelt, ha a kulcs nem létezik, egy változót adnak át kulcsként, és az érték megváltozik. és hoznak létre kulcsot és értéket, ami értéket ad.
2. Második túlterhelés: GetOrAdd (TKEY, TValue) Az első paraméter kulcsfontosságú, a második paraméter célja, hogy új értéket hozzon létre, amelyet a kulcs ad, ha az nem létezik. Értéket hoz. public TValue GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) public TValue GetOrAdd(TKEY, TValue)
Az AddOrUpdate és GetOrAdd minden művelete egy olyan módszer, amelyet a ConcurrentDictionary alkalmaz a szótár módosítására/írására, ami biztosítja a szálak biztonságát (zár nélküli módon, az adatok olvasása a szótárban). |