Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 58026|Ответ: 2

[Источник] ConcurrentDictionary поддерживает новые и обновлённые обновления

[Скопировать ссылку]
Опубликовано 13.07.2016 11:12:05 | | |
Среда разработки: .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 использует для модификации и записи в словарь, что обеспечивает безопасность потоков (это выполняется без блокировки, с чтением данных в словаре).




Предыдущий:LINQ-многоусловный запрос, где строится условие
Следующий:Windows ниже Memcached Basic Operations Command
 Хозяин| Опубликовано 13.09.2016 13:33:25 |
ConcurrentDictionary vs. Dictionary+Locking — Деннис Гао
http://www.itsvse.com/thread-3106-1-1.html
(Источник: Code Agriculture Network)
 Хозяин| Опубликовано 23.03.2021 11:32:18 |
Добавить или обновить

или

Адрес документа:Вход по гиперссылке виден.
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com