/// <summary> /// 从内部缓存获取一个内存表 /// </summary> /// <param name="key">key</param> /// <returns>table</returns> internal TMemoryTable Get(TKey key) { GetByKey <TKey, TMemoryTable> getByKey = GetMemoryTableByKey; TMemoryTable memoryTable = cache.GetWithAdd(key, getByKey); return(memoryTable); }
/// <summary> /// 根据key获取value,当获取不到时,通过getBykey方法获取value,并插入缓存, /// 同时返回给调用者 /// </summary> /// <param name="key">key</param> /// <param name="getByKey">GetByKey类型的方法委托</param> /// <returns>value</returns> public V GetWithAdd(K key, GetByKey <K, V> getByKey) { cacheLock.EnterUpgradeableReadLock(); V result; try { if (innerCache.ContainsKey(key)) { result = innerCache[key]; } else { result = getByKey(key); if (result != null) { cacheLock.EnterWriteLock(); try { innerCache[key] = result; } finally { cacheLock.ExitWriteLock(); } } } } finally { cacheLock.ExitUpgradeableReadLock(); } return(result); }