Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 58026|Odpověď: 2

[Zdroj] ConcurrentDictionary podporuje nové i aktualizované aktualizace

[Kopírovat odkaz]
Zveřejněno 13.07.2016 11:12:05 | | |
Vývojové prostředí: .NET 4.0 nebo novější

Poznámka:
Jmenný prostor System.Collections.Concurrent v rámci .NET Framework 4.
Stejně jako v dokumentaci MSDN, ConcurrentDictionary implementuje sbírku bezpečnou pro vlákna, ke které může přistupovat více vláken současně.
ConcurrentDictionary implementuje IDictionary<TKey, TValue> a má několik unikátních mechanismů pro přidávání a aktualizaci klíče/hodnoty. (Níže je vysvětlení, kdy a jakou metodu použít)

Scénář 1: Přidejte novou položku, ale pokud klíč ve slovníku neexistuje...
Použijte TryAdd. TryAdd přijímá klíč a hodnotu přidanou do slovníku, vrací fasle, pokud klíč ve slovníku neexistuje; Pokud je přítomen, je to pravda.
public bool TryAdd(TKey klíč, TValue value)

Situace 2: Aktualizovat existující klíč ve slovníku Hodnota...
Použijte TryUpdate. Pokud slovník tento klíč obsahuje a poskytuje podmíněnou aktualizaci, měl by v této metodě poskytnout srovnávací hodnotu, kterou lze aktualizovat, když je aktuální hodnota ekvivalentní hodnotě porovnání (TValue comparisonValue).
public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)


Situace 3: Do slovníku je třeba přidat klíč/hodnotu; Pokud klíč není jistý, zda ve slovníku existuje; Pokud existuje, aktualizuj Pokud neexistuje, přidej to...

Použijte AddOrUpdate. AddOrUpdate má dvě přetížení a dvě přetížení vracejí hodnotu hodnoty:
Prvním přetíženým parametrem je AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
Parametry jsou Key a dva delegáti; Účelem prvního delegáta je delegovat, když klíč neexistuje, a vrátit hodnotu (počáteční hodnotu). Tato delegační funkce vrací < počáteční hodnotu, klíč>.
Druhý delegát Func < vrací Value, klíč, oldValue> a vykoná prvního delegáta, pokud klíč ve slovníku neexistuje (pokud existuje, nespustí se; Účelem je dát hodnotě počáteční hodnotu), a poté vrátí hodnotu (počáteční hodnotu hodnoty); Druhá delegace je metoda pro změnu hodnoty, která také vyžaduje návratovou hodnotu (změnu počáteční hodnoty na finální hodnotu). Func < vrátit > Value, key, oldValue
public TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)

                 2. Parametr druhého přetížení je AddOrUpdate (TKey, TValue, Func<TKey, TValue, TValue>)
Prvním parametrem je klíč, druhým je, když klíč neexistuje, tato hodnota je počáteční hodnota hodnoty a třetí je delegát, který provádí změnu (Func< vrací hodnotu, klíč, oldValue>).
                      veřejná TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)

Situace 4: Přidejte hodnotu klíče do slovníku, ale pokud klíč již existuje, vyjměte tuto hodnotu; Jinak bude přidán
První overload: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory)
Prvním parametrem je klíč, druhým parametrem je delegovaná Func<hodnota, klíč>, když klíč neexistuje, proměnná je předána jako klíč a hodnota se změní. a vytvoří klíč a hodnotu, vrátí hodnotovou hodnotu.

       2. Druhé přetížení: GetOrAdd (TKEY, TValue)
Prvním parametrem je klíč a účelem druhého parametru je vytvořit novou hodnotu danou klíčem, když neexistuje. Vrací hodnotu.
public TValue GetOrAdd(TKEY,Func<TKey, TValue>valueFactory)
veřejná TValue GetOrAdd(TKEY, TValue)


Každá operace AddOrUpdate a GetOrAdd je metoda, kterou ConcurrentDictionary používá pro úpravu/zápis do slovníku, což zajišťuje bezpečnost vláken (provádí se to bez zámku, tedy čtením dat ve slovníku).




Předchozí:LINQ vícepodmíněný dotaz, kde je podmínka konstruována
Další:Okna pod základními operačními příkazy Memcached
 Pronajímatel| Zveřejněno 13.09.2016 13:33:25 |
ConcurrentDictionary vs. Dictionary+Locking - Dennis Gao
http://www.itsvse.com/thread-3106-1-1.html
(Zdroj: Code Agriculture Network)
 Pronajímatel| Zveřejněno 23.03.2021 11:32:18 |
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com