예제 #1
0
        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();
            }
        }
예제 #2
0
 /// <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();
     }
 }