Si consideri il seguente scenario.NET Forza metodo di esecuzione differita
private static ConcurrentDictionary<string, ConcurrentDictionary<string, string>> CachedData;
in cui più thread accedere a questa variabile attraverso un metodo chiamando
ConcurrentDictionary<string, string> dic = CachedData.GetorAdd(key, HeavyDataLoadMethod())
dove questo metodo fa alcune operazioni pesanti di peso per recuperare i dati
private ConcurrentDictionary<string, string> HeavyDataLoadMethod()
{
var data = new ConcurrentDictionary<string,string>(SomeLoad());
foreach (var item in OtherLoad())
//Operations on data
return data;
}
Il mio problema qui è che se uso GetorAdd
il HeavyDataLoadMethod
viene eseguito anche se non è necessario.
Mi chiedevo se c'è un modo per sfruttare l'esecuzione posticipata in questo caso e rendere il HeavyDataLoadMethod
rinviato in modo che non venga eseguito finché non è realmente necessario.
(Sì, so che questo è semplice come controllare con un ContainsKey e non pensarci più, ma sono curioso di questo approccio)
Grazie per sottolineare il sovraccarico del metodo, solo ciò che è necessario –