Почему C# ConcurrentDictionary имеет перегрузку AddOrUpdate с методом addValueFactory?C#

Место общения программистов C#
Ответить
Anonymous
 Почему C# ConcurrentDictionary имеет перегрузку AddOrUpdate с методом addValueFactory?

Сообщение Anonymous »

Используется ли перегрузка AddOrUpdate, принимающая addValueFactory, в тех случаях, когда мы хотим гарантировать, что экземпляр «дорогого» объекта будет создан только один раз?
ИИ говорит, что это полезно в случаях, когда вы имеете дело с дорогими объектами, поэтому вы создаете этот дорогой объект только тогда, когда объект с данным ключом не существует в параллельном словаре.
Я задал ИИ следующий вопрос: не могу Я просто заранее проверяю, существует объект или нет вот так:

Код: Выделить всё

if (concurrentDictionary.TryGetValue(key, out var item))
{
return item;
}
Или вот так:

Код: Выделить всё

concurrentDictionary.ContainsKey(key)
На что он ответил, что, поскольку это параллельный словарь, кто-то другой может одновременно добавить элемент с тем же ключом, поэтому параллельный словарь будет выполнять внутренние проверки и вызывать моего делегата (который создает дорогостоящий объект) только в том случае, если элемент не существует.
Для меня это имеет смысл, но когда я просматривал исходный код ConcurrentDictionary, мне не удалось выяснить, есть ли какие-либо проверки, если ключ существует или нет.
Так действительно ли мы используем перегрузку AddOrUpdate, которая принимает addValueFactory, в случаях, когда мы хотим быть уверены, что не создаем экземпляр дорогостоящего объекта более одного раза?

Подробнее здесь: https://stackoverflow.com/questions/799 ... efactory-m
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»