public override object RemoveSync(object[] keys, ItemRemoveReason reason, bool notify, OperationContext operationContext) { ArrayList depenedentItemList = new ArrayList(); try { Hashtable totalRemovedItems = new Hashtable(); CacheEntry entry = null; IDictionaryEnumerator ide = null; for (int i = 0; i < keys.Length; i++) { try { if (keys[i] != null) { entry = Internal.Remove(keys[i], reason, false, null, LockAccessType.IGNORE_LOCK, operationContext); } if (entry != null) { totalRemovedItems.Add(keys[i], entry); } } catch (Exception ex) { } } ide = totalRemovedItems.GetEnumerator(); while (ide.MoveNext()) { try { entry = ide.Value as CacheEntry; if (entry != null) { if (entry.Value is CallbackEntry) { EventId eventId = null; OperationID opId = operationContext.OperatoinID; CallbackEntry cbEtnry = (CallbackEntry)entry.Value; EventContext eventContext = null; if (cbEtnry != null && cbEtnry.ItemRemoveCallbackListener != null && cbEtnry.ItemRemoveCallbackListener.Count > 0) { //generate event id if (!operationContext.Contains(OperationContextFieldName.EventContext)) //for atomic operations { eventId = EventId.CreateEventId(opId); } else //for bulk { eventId = ((EventContext)operationContext.GetValueByField(OperationContextFieldName.EventContext)).EventID; } eventId.EventType = EventType.ITEM_REMOVED_CALLBACK; eventContext = new EventContext(); eventContext.Add(EventContextFieldName.EventID, eventId); EventCacheEntry eventCacheEntry = CacheHelper.CreateCacheEventEntry(cbEtnry.ItemRemoveCallbackListener, entry); eventContext.Item = eventCacheEntry; eventContext.Add(EventContextFieldName.ItemRemoveCallbackList, cbEtnry.ItemRemoveCallbackListener.Clone()); //Will always reaise the whole entry for old clients NotifyCustomRemoveCallback(ide.Key, entry, reason, true, operationContext, eventContext); } } } } catch (Exception ex) { } } } catch (Exception) { throw; } return(depenedentItemList); }