Рассмотрим следующий сценарий
private static ConcurrentDictionary<string, ConcurrentDictionary<string, string>> CachedData;
где несколько потоков получают доступ к этой переменной через вызов метода
ConcurrentDictionary<string, string> dic = CachedData.GetorAdd(key, HeavyDataLoadMethod())
где этот метод выполняет некоторые тяжелые операции для извлечения данных
private ConcurrentDictionary<string, string> HeavyDataLoadMethod()
{
var data = new ConcurrentDictionary<string,string>(SomeLoad());
foreach ( var item in OtherLoad())
//Operations on data
return data;
}
Моя проблема в том, что если я используюGetorAdd
, то HeavyDataLoadMethod
выполняется, даже если это не нужно.
Мне было интересно, есть ли способ воспользоваться отложенным выполнением в этом случае и сделать HeavyDataLoadMethod
deferred, чтобы он не выполнялся до тех пор, пока он действительно не понадобится.
(Да, я знаю, что это так же просто, как проверить с помощью ContainsKey и забыть об этом, но мне любопытен этот подход)