Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 58026|Válasz: 2

[Forrás] A ConcurrentDictionary támogatja az új és frissített frissítéseket

[Linket másol]
Közzétéve 2016. 07. 13. 11:12:05 | | |
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).




Előző:LINQ többfeltételes lekérdezés, ahol a feltétel megépül
Következő:Windows a Memcached alapműveleti parancsok alatt
 Háziúr| Közzétéve 2016. 09. 13. 13:33:25 |
ConcurrentDictionary vs. Dictionary+Locking - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Forrás: Code Agriculture Network)
 Háziúr| Közzétéve 2021. 03. 23. 11:32:18 |
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com