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