Comments 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
тоже, кстати, необязательно — это и есть режим по умолчанию.
Спасибо, интересно и полезно.
Sign up to leave a comment.
Интересные сюрпризы ConcurrentDictionary (+разбор задачи с DotNext 2017 Moscow)