var service = host.Services.GetRequiredService<ICacheService>();
service.SetGroupDateTime();
service.PrintGroupDateTime();
service.PrintGroupDateTime();
var cache = host.Services.GetRequiredService<IMemoryCache>();
var cancellationTokenSource = cache.Get<CancellationTokenSource>(CacheService.DependentCancellationTokenSourceCacheKey);
cancellationTokenSource.Cancel();
service.PrintGroupDateTime();
复制代码
从控制台输出可以看得到前两次缓存获取正常,当调用 CancellationTokenSource.Cancel() 方法取消请求之后,缓存过期了。
如果使用 CancellationTokenSource,则允许将多个缓存条目作为一个组逐出。 使用上述代码中的 using 模式,在 using 范围内创建的缓存条目会继承触发器和到期设置。不过这种方式只有 using 范围的缓存项和 using 范围内使用 CancellationTokenSource 的缓存项可以构成一个组,如果范围内还有其他的缓存项,是不算在一个组内的。
如果要把多个缓存项全部纳入一个组,还可以用以下的方式:
_cache.Set(ParentCacheKey,
DateTime.Now,
new CancellationChangeToken(cancellationTokenSource.Token));
_cache.Set(
ChildCacheKey,
DateTime.Now,
new CancellationChangeToken(cancellationTokenSource.Token));
_cache.Set(
ChildsCacheKey,
DateTime.Now,
new CancellationChangeToken(cancellationTokenSource.Token));