종속성이있는 다른 항목이 변경되면 MemoryCache에서 항목을 제거하려고합니다. 이는 종속 키에 대한 종속성을 캐시 엔트리 변경 모니터를 생성하여 설정되고 :MemoryCache - 종속성이 변경되면 종속 캐시 항목을 제거하는 방법
private void OnDependencyChanged(object state)
{
// what do I do here as "state" is always null?
}
의도 한대로 항목 캐시에 추가되고 :
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
방법이있다 OnDependencyChanged
메서드는 모니터링 된 키가 변경 될 때 예상대로 호출되지만 전달 된 "상태"인스턴스는 항상 null이므로 종속성이 변경되어 수행 할 수없는 캐시 키에 대해 아무것도 모른다는 것을 의미합니다. 계획 퇴거.
내가 여기에 뭔가를 놓친 적이 있습니까?이 모든 잘못된 길로 가고 있습니까?
안녕하세요 Jibberish, 올바른 답변을 표시 했는데도 대답이 옳은 이유를 이해할 수 없습니다. OnChangedCacheEntry는 어디에서 찾을 수 있습니까? 나는 항상 같은 문제에 직면 해 있습니다. 조금만 더? 감사! –