public CacheValueWrapper <TValue> AddOrUpdate(TKey key, Func <TKey, CacheValueWrapper <TValue> > valueFactory) { using (_layer2Repository.GetSyncLock(key)) { CacheValueWrapper <TValue> value; if (!_layer2Repository.ContainsKey(key)) //double check lock { value = _layer2Repository.AddOrUpdate(key, valueFactory); } else { value = _layer2Repository.GetValue(key); } using (_layer1Repository.GetSyncLock(key)) _layer1Repository.AddOrUpdate(key, k => value); return(value); } }
public bool ContainsKey(TKey key) { return(_layer1Repository.ContainsKey(key) || _layer2Repository.ContainsKey(key)); }