public TValue Get(TKey key, MissingValueProvider <TKey, TValue> missingValueProvider) { _lock.EnterUpgradeableReadLock(); try { if (_cache.Has(key)) { return(_cache.Get(key, missingValueProvider)); } _lock.EnterWriteLock(); try { return(_cache.Get(key, missingValueProvider)); } finally { _lock.ExitWriteLock(); } } finally { _lock.ExitUpgradeableReadLock(); } }
public ConcurrentCache(IDictionary <TKey, TValue> values, IEqualityComparer <TKey> equalityComparer, MissingValueProvider <TKey, TValue> missingValueProvider) : this(values, equalityComparer) { _missingValueProvider = missingValueProvider; }
public QwConcurrent(IEnumerable <KeyValuePair <TKey, TValue> > values, IEqualityComparer <TKey> equalityComparer, MissingValueProvider <TKey, TValue> missingValueProvider) : this(values, equalityComparer) { _missingValueProvider = missingValueProvider; }
public DictionaryCache(IDictionary <TKey, TValue> values, MissingValueProvider <TKey, TValue> missingValueProvider, bool copy) : this(values, copy) { _missingValueProvider = missingValueProvider; }
public InterfaceReflectionCache() { _cache = new ConcurrentCache <Type, ICache <Type, Type> >(typeKey => { MissingValueProvider <Type, Type> missingValueProvider = x => GetInterfaceInternal(typeKey, x); return(new ConcurrentCache <Type, Type>(missingValueProvider)); }); }
public TValue Get(TKey key, MissingValueProvider <TKey, TValue> missingValueProvider) { TValue value; if (_values.TryGetValue(key, out value)) { return(value); } value = missingValueProvider(key); Add(key, value); return(value); }
public TValue Get(TKey key, MissingValueProvider <TKey, TValue> missingValueProvider) { bool added = false; TValue value = _values.GetOrAdd(key, x => { added = true; return(missingValueProvider(x)); }); if (added) { _valueAddedCallback(key, value); } return(value); }
public ConcurrentCache(IDictionary <TKey, TValue> values, MissingValueProvider <TKey, TValue> missingValueProvider) : this(values) { _missingValueProvider = missingValueProvider; }
public ConcurrentCache(IEqualityComparer <TKey> equalityComparer, MissingValueProvider <TKey, TValue> missingValueProvider) : this(equalityComparer) { _missingValueProvider = missingValueProvider; }
public ConcurrentCache(MissingValueProvider <TKey, TValue> missingValueProvider) : this() { _missingValueProvider = missingValueProvider; }
public DictionaryCache(IDictionary <TKey, TValue> values, MissingValueProvider <TKey, TValue> missingValueProvider) : this(values, true) { _missingValueProvider = missingValueProvider; }
public DictionaryCache(IEqualityComparer <TKey> equalityComparer, MissingValueProvider <TKey, TValue> missingValueProvider) : this(equalityComparer) { _missingValueProvider = missingValueProvider; }
public DictionaryCache(MissingValueProvider <TKey, TValue> missingValueProvider) : this() { _missingValueProvider = missingValueProvider; }
public TInterface Get(Type key, MissingValueProvider <Type, TInterface> missingValueProvider) { return(_cache.Get(key, missingValueProvider)); }
public TValue Get(TKey key, MissingValueProvider <TKey, TValue> missingValueProvider) { return(_cache.Get(key, missingValueProvider)); }
/// <summary> /// Constructs a cache for the specified generic type. /// </summary> /// <param name="genericType">The generic type to close</param> /// <param name="missingValueProvider">The implementation provider, which must close the generic type with the passed type</param> public GenericTypeCache(Type genericType, MissingValueProvider <Type, TInterface> missingValueProvider) : this(genericType, new ConcurrentCache <Type, TInterface>(missingValueProvider)) { }
public QwConcurrent(IEnumerable <KeyValuePair <TKey, TValue> > values, MissingValueProvider <TKey, TValue> missingValueProvider) : this(values) { _missingValueProvider = missingValueProvider; }