Example #1
0
        /*
         * Close the item to complete its removal from cache.
         *
         * @param reason The reason the item is removed.
         */
        internal void Close(CacheItemRemovedReason reason)
        {
            Debug.Assert(State == EntryState.RemovedFromCache, "State == EntryState.RemovedFromCache");
            State = EntryState.Closed;

            object onRemovedTargets = null;

            object[] targets = null;

            _lockTargets.AcquireWriterLock();
            try {
                if (_onRemovedTargets != null)
                {
                    onRemovedTargets = _onRemovedTargets;
                    if (onRemovedTargets is Hashtable)
                    {
                        ICollection col = ((Hashtable)onRemovedTargets).Keys;
                        targets = new object[col.Count];
                        col.CopyTo(targets, 0);
                    }
                }
            }
            finally {
                _lockTargets.ReleaseWriterLock();
            }

            if (onRemovedTargets != null)
            {
                if (targets != null)
                {
                    foreach (object target in targets)
                    {
                        if (target is CacheDependency)
                        {
                            ((CacheDependency)target).ItemRemoved();
                        }
                        else
                        {
                            CallCacheItemRemovedCallback((CacheItemRemovedCallback)target, reason);
                        }
                    }
                }
                else if (onRemovedTargets is CacheItemRemovedCallback)
                {
                    CallCacheItemRemovedCallback((CacheItemRemovedCallback)onRemovedTargets, reason);
                }
                else
                {
                    ((CacheDependency)onRemovedTargets).ItemRemoved();
                }
            }

            if (_dependency != null)
            {
                _dependency.DisposeInternal();
            }
        }
Example #2
0
 protected override void Dispose(bool disposing)
 {
     if (disposing)
     {
         if (_dependency != null)
         {
             _dependency.DisposeInternal();
         }
     }
 }