Example #1
0
        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);
            }
        }
Example #2
0
 public bool ContainsKey(TKey key)
 {
     return(_layer1Repository.ContainsKey(key) || _layer2Repository.ContainsKey(key));
 }