Rozważmy następujący scenariuszmetoda .NET Siła odroczyć wykonanie
private static ConcurrentDictionary<string, ConcurrentDictionary<string, string>> CachedData;
gdzie wielu wątków dostęp do tej zmiennej za pomocą metody wywołującego
ConcurrentDictionary<string, string> dic = CachedData.GetorAdd(key, HeavyDataLoadMethod())
gdzie metoda ta ma pewne operacje waga ciężka do pobierania danych
private ConcurrentDictionary<string, string> HeavyDataLoadMethod()
{
var data = new ConcurrentDictionary<string,string>(SomeLoad());
foreach (var item in OtherLoad())
//Operations on data
return data;
}
Mój problem polega na tym, że jeśli używam GetorAdd
HeavyDataLoadMethod
zostaje wykonany, nawet jeśli nie jest potrzebny.
Zastanawiam się, czy jest jakiś sposób, aby skorzystać z odroczonego wykonania w tym przypadku i sprawić, że HeavyDataLoadMethod
zostanie odroczony, więc nie zostanie wykonany, dopóki nie będzie naprawdę potrzebny.
(Tak, wiem, że to jest tak proste, jak sprawdzanie z containsKey i zapomnieć o nim, ale jestem ciekaw tego podejścia)
Dzięki za wskazanie przeciążenia metody, wystarczy to, co jest potrzebne –