/* * 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(); } }
protected override void Dispose(bool disposing) { if (disposing) { if (_dependency != null) { _dependency.DisposeInternal(); } } }