/// <summary> /// Registers callback when an entry with corresponding key expires /// </summary> /// <param name="key"></param> /// <param name="action"></param> public override void OnExpire(string key, Action <CacheEntry> action) { var hasEntry = EntryExpirationCallbacks.TryGetValue(key, out ConcurrentBag <Action <CacheEntry> > callbacks); if (!hasEntry) { callbacks = new ConcurrentBag <Action <CacheEntry> >(); EntryExpirationCallbacks.TryAdd(key, callbacks); } callbacks.Add(action); }
/// <summary> /// Invokes callbacks on expiration /// </summary> /// <param name="key"></param> public override void InvokeExpireCallbacks(string key) { var entry = Configuration.DataProvider.Get(key); foreach (var globalCallback in GlobalExpirationCallbacks) { globalCallback(entry); } if (!EntryExpirationCallbacks.ContainsKey(key)) { return; } foreach (var entryCallback in EntryExpirationCallbacks[key]) { entryCallback(entry); } }