Среда разработки: .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 value)
Ситуация 2: Обновить существующий ключ в словаре Value... Используйте TryUpdate. Если словарь содержит этот ключ и даёт условное обновление, он должен дать сравнительное значение в этом методе, которое можно обновить, когда текущее значение эквивалентно сравнению (TValue comparValue). public bool TryUpdate(TKey key, TValue newValue, TValue comparisonValue)
Ситуация 3: В словарь необходимо добавить ключ/значение; Если ключ не уверен, существует ли он в словаре; Если он существует, обновляй. Если нет, добавляй...
Используйте AddOrUpdate. В AddOrUpdate есть два перегрузки, и оба из них возвращают значение значения: Первым перегруженным параметром является AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>) Параметры: Ключ и два делегата; Цель первого делегата — делегировать, когда ключа не существует, и возвращать значение (начальное значение). Это делегирование Func возвращает < начальное значение, ключ>. Второй делегат Func < возвращает Value, key, oldValue> и выполняет первый делегат, если ключ отсутствует в словаре (если он существует, он не выполняется; Цель — придать значению начальное значение), а затем оно вернёт значение (начальное значение значения); Вторая делегация — это метод изменения значения значения, который также требует возвратного значения (изменения начального значения в конечное). Func < вернуть > Value, key, oldValue Публичное ТВалю AddOrUpdate(TKey, Func<TKey, TValue>, Func<TKey, TValue, TValue>)
2. Параметр второй перегрузки — AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>) Первый параметр — ключ, второй — когда ключ не существует, это значение — начальное значение значения, а третий — delegate — выполнить изменение (Func< возвращает Value, key, oldValue>). Public TValue AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
Ситуация 4: Добавить значение ключа в словарь, но если ключ уже существует, убрать значение; В противном случае он будет добавлен Первая перегрузка: GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) Первый параметр — ключ, второй — делегированный Func<значение, ключ>, когда ключ отсутствует, переменная передаётся как ключ, и значение меняется. и создать ключ и значение, возвращая значение значения.
2. Вторая перегрузка: GetOrAdd (TKEY, TValue) Первый параметр — ключ, а цель второго — создать новое значение, задаваемое ключом, когда оно не существует. Возвращает стоимость. публичное ТВalue GetOrAdd(TKEY, Func<TKey, TValue>valueFactory) Общественное ТВалуэ Get Or Add (TKEY, TValue)
Каждая операция AddOrUpdate и GetOrAdd — это метод, который ConcurrentDictionary использует для модификации и записи в словарь, что обеспечивает безопасность потоков (это выполняется без блокировки, с чтением данных в словаре). |