public void Add(string key, T value) { HitCounterCacheItem item = new HitCounterCacheItem(value); readWriteLock.EnterReadLock(); try { if (data.TryAdd(key, item)) { item.IncreaseHitCount(); } else { //Already exits if (data.TryGetValue(key, out item)) { item.IncreaseHitCount(); } } } finally { readWriteLock.ExitReadLock(); } }
/// <summary> /// Thread safe method /// </summary> /// <param name="func"></param> internal void DeleteIf(Func <HitCounterCacheItem, bool> func) { readWriteLock.EnterWriteLock(); try { foreach (var key in data.Keys) { HitCounterCacheItem value = data[key]; if (func(value)) { data.TryRemove(key, out value); } } } finally { readWriteLock.ExitWriteLock(); } }