【发布时间】:2011-12-05 23:57:32
【问题描述】:
当对它们所依赖的其他条目进行更改时,我试图从 MemoryCache 中逐出条目。这是通过为依赖键上的依赖项创建缓存条目更改监视器来设置的:
public bool AddToCache(string key, object dataItem,
DateTimeOffset absoluteExpiration, IEnumerable<string> dependencyKeys)
{
bool result = false;
if (!string.IsNullOrWhiteSpace(key) && dataItem != null)
{
CacheItemPolicy policy = new CacheItemPolicy {
AbsoluteExpiration = absoluteExpiration
};
if (masterKeys != null && masterKeys.Any())
{
policy.ChangeMonitors.Add(
this.provider.Cache.
CreateCacheEntryChangeMonitor(dependencyKeys));
foreach (ChangeMonitor monitor in policy.ChangeMonitors)
{
monitor.NotifyOnChanged(this.OnDependencyChanged);
}
}
result = this.provider.Cache.Add(key, dataItem, policy);
}
return result;
}
OnChangedCallBack 方法是这样的:
private void OnDependencyChanged(object state)
{
// what do I do here as "state" is always null?
}
项目按预期添加到缓存中,当对受监控的键进行更改时,OnDependencyChanged 方法会按预期调用,但是传递给它的“状态”实例始终为空,这意味着我对依赖项已更改的缓存键一无所知,因此无法执行计划的驱逐。
我在这里错过了什么吗,我是不是走错了路?
【问题讨论】:
-
嗨,Jibberish,你标记了正确的答案,但我仍然无法理解为什么答案是正确的,我什至找不到 OnChangedCacheEntry 的位置......我面临同样的问题,状态始终为空,你能帮忙解释一下吗?谢谢!
标签: c# .net caching c#-4.0 memorycache