Exemplo n.º 1
0
        public ExpireMemoryCache(TimeSpan expireTime)
        {
            this.ExpireTime = expireTime;

            _callback = GuidExpireCallback.Create(delegate
            {
                if (!_state)
                {
                    _lock.EnterReadLock();
                    List <TKey> list = new List <TKey>();
                    foreach (var item in _map)
                    {
                        if (item.Value.Expire)
                        {
                            if (OnClearExpire != null)
                            {
                                OnClearExpire(this, new ClearExpireEventArgs <TValue>(item.Value.Item));
                            }
                            list.Add(item.Key);
                        }
                    }
                    _lock.ExitReadLock();
                    _lock.EnterWriteLock();
                    foreach (var item in list)
                    {
                        _map.Remove(item);
                    }
                    _lock.ExitWriteLock();
                }
            });
            CacheFactory.AddCallback(_callback);
        }
Exemplo n.º 2
0
 internal static void AddCallback(IExpireCallback callback)
 {
     lock (lockObj)
     {
         int count = _callbacks.Count;
         _callbacks.AddOrUpdate(callback.Key, callback.Callback, (k, a) => callback.Callback);
         if (count == 0 && _callbacks.Count > count)
         {
             ResetTimer();
         }
     }
 }
Exemplo n.º 3
0
 internal static void AddCallback(IExpireCallback callback)
 {
     lock (lockObj)
     {
         int count = _callbacks.Count;
         _callbacks.AddOrUpdate(callback.Key, callback.Callback, (k, a) => callback.Callback);
         if (count == 0 && _callbacks.Count > count)
         {
             ResetTimer();
         }
     }
 }
Exemplo n.º 4
0
 internal static void RemoveCallback(IExpireCallback callback)
 {
     lock (lockObj)
     {
         int    count = _callbacks.Count;
         Action tempCallback;
         _callbacks.TryRemove(callback.Key, out tempCallback);
         if (count > 0 && _callbacks.Count == 0)
         {
             ResetTimer();
         }
     }
 }
Exemplo n.º 5
0
 internal static void RemoveCallback(IExpireCallback callback)
 {
     lock (lockObj)
     {
         int count = _callbacks.Count;
         Action tempCallback;
         _callbacks.TryRemove(callback.Key, out tempCallback);
         if (count > 0 && _callbacks.Count == 0)
         {
             ResetTimer();
         }
     }
 }