велосипед не изобретать.
class CachedCollection<K, V>:
public Values: Dictionary<K, V>
private GetNext(key):
if Values contains key:
return Values.At(key)
value = resource.Get(key)
Values.add(value)
return value
ConcurrentDictionary.GetOrAdd Только там нет гарантий что лямбда не будет вызвана много раз при многопоточном вызове этого метода. Но есть гарантия что будет добавлена и возвращена только результат одной!
Можно в качестве TValue сделать. Lazy. Спасибо, то, что доктор прописал)
Dictionary.GetOrAdd ?
Обсуждают сегодня