Как стать автором
Обновить

Комментарии 3

Спасибо. Почерпнул много нужного.

Мне кажется, проблему с Lazy можно было бы решить более изящно (не перенося ответственность по инициализации значений на вызывателя):


var dictionary = new ConcurrentDictionary<MyKey, MyValue>();
var lazy = new Lazy<MyValue>(() => new MyValue());
var value = dictionary.GetOrCreate(key, _ => lazy.Value);

Этот код так же защищён от множественных одновременных вызовов .Value, но при этом наружу из него Lazy не торчат — клиент получает обычный ConcurrentDictionary<MyKey, MyValue>.


Явно указывать ExecutionAndPublication тоже, кстати, необязательно — это и есть режим по умолчанию.

Спасибо, интересно и полезно.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий