Среда за разработка: .NET 4.0 или по-висока
Забележка: Пространството на имената System.Collections.Concurrent в рамките на .NET Framework 4. Както в MSDN документацията, ConcurrentDictionary реализира колекция, безопасна за нишки, която може да бъде достъпвана от няколко нишки едновременно. ConcurrentDictionary реализира IDictionary<TKey, TValue> и има някои уникални механизми за добавяне, актуализиране на ключ/стойност. (По-долу е обяснение кога и какъв метод да се използва)
Сценарий 1: Добавете нов елемент, само ако ключът не съществува в речника... Използвайте TryAdd. TryAdd приема ключа и добавената стойност към речника, връща fasle, ако ключът не съществува в речника; Връща вярно, ако е налично. public bool TryAdd(TKey key, TValue стойност)
Ситуация 2: Актуализирайте съществуващия ключ в Стойността на речника... Използвайте TryUpdate. Ако речникът притежава този ключ и дава условна актуализация, трябва да даде сравнителна стойност в този метод, която може да се актуализира, когато текущата стойност е еквивалентна на стойността на сравнение (TValue comparValue). public bool TryUpdate(TKey ключ, TValue newValue, TValue comparisonValue)
Ситуация 3: Трябва да се добави ключ/стойност към речника; Ако ключът не е сигурен дали съществува в речника; Ако съществува, обнови Ако не съществува, добави го...
Използвайте AddOrUpdate. AddOrUpdate има две претоварвания, като двете претоварвания връщат стойността на стойността: Първият претоварен параметър е AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>) Параметрите са Ключ и двама делегати; Целта на първия делегат е да делегира, когато ключът не съществува, и да върне стойността (началната стойност). Тази делегация Func връща началната стойност < ключ>. Вторият делегат Func < връща Value, key, oldValue и изпълнява първия делегат> ако ключът не съществува в речника (ако съществува, не се изпълнява; Целта е да се даде на стойността началната стойност), а след това ще се върне стойността (началната стойност на стойността); Второто делегиране е метод за промяна на стойността на стойността, който също изисква връщане на стойността (промяна на началната стойност към крайната). Func < връща > Стойност, ключ, oldValue public TValue AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2. Параметърът на второто претоварване е AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>) Първият параметър е ключ, вторият е когато ключът не съществува, тази стойност е началната стойност на стойността, а третият е делегат за изпълнение на промяната (Func< връща Value, key, oldValue>). public TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
Ситуация 4: Добавете стойността на ключа към речника, но ако ключът вече съществува, премахнете стойността; В противен случай ще бъде добавен Първо претоварване: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) Първият параметър е ключ, вторият параметър е делегиран Func<value, key>, когато ключът не съществува, променлива се предава като ключ и стойността се променя. и създават ключ и стойност, връщайки стойност.
2. Второ претоварване: GetOrAdd (TKEY, TValue) Първият параметър е ключов, а целта на втория параметър е да създаде нова стойност, дадена от ключа, когато тя не съществува. Връща стойност. public TValue GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) Обществена телевизия Get Or Add (TKEY, TValue)
Всяка операция на AddOrUpdate и GetOrAdd е метод, който ConcurrentDictionary има за модифициране/записване в речника, което гарантира безопасността на нишките (извършва се без заключване, чрез четене на данни в речника). |