public void FireTokenRemovesItem() { var cache = CreateCache(); string key = "myKey"; var value = new object(); var callbackInvoked = new ManualResetEvent(false); var expirationToken = new TestExpirationToken() { ActiveChangeCallbacks = true }; cache.Set(key, value, new MemoryCacheEntryOptions() .AddExpirationToken(expirationToken) .RegisterPostEvictionCallback((subkey, subValue, reason, state) => { // TODO: Verify params var localCallbackInvoked = (ManualResetEvent)state; localCallbackInvoked.Set(); }, state: callbackInvoked)); expirationToken.Fire(); var found = cache.TryGetValue(key, out value); Assert.False(found); Assert.True(callbackInvoked.WaitOne(TimeSpan.FromSeconds(30)), "Callback"); }
public void TokenExpires_LinkedEntry() { var cache = CreateCache(); var obj = new object(); string key = "myKey"; string key1 = "myKey1"; var expirationToken = new TestExpirationToken() { ActiveChangeCallbacks = true }; using (var link = cache.CreateLinkingScope()) { cache.Set(key, obj, new MemoryCacheEntryOptions().AddExpirationToken(expirationToken)); cache.Set(key1, obj, new MemoryCacheEntryOptions().AddEntryLink(link)); } Assert.Same(obj, cache.Get(key)); Assert.Same(obj, cache.Get(key1)); expirationToken.Fire(); object value; Assert.False(cache.TryGetValue(key1, out value)); Assert.False(cache.TryGetValue(key, out value)); }