Próbuję eksmitować wpisy z MemoryCache po wprowadzeniu zmian w innych wpisach, na których są one zależne. To jest ustanowiony przez tworzenie monitorów Zmiana wpisu cache dla zależnościami na klawiszach zależnych:C# 4.0 MemoryCache - jak usunąć zależne wpisy pamięci podręcznej po wprowadzeniu zmian w ich zależnościach
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;
}
Sposób OnChangedCallBack
to:
private void OnDependencyChanged(object state)
{
// what do I do here as "state" is always null?
}
Elementy są dodawane do pamięci podręcznej zgodnie z przeznaczeniem, a metoda OnDependencyChanged
jest wywoływana zgodnie z oczekiwaniami, gdy wprowadzana jest zmiana w monitorowanym kluczu, jednak przekazana do niej instancja "stanu" ma zawsze wartość null, co oznacza, że nic nie wiem o kluczu pamięci podręcznej, którego zależność uległa zmianie i dlatego nie może wykonać planowana eksmisja.
Czy coś tu przeoczyłem, czy podchodzę do tego w niewłaściwy sposób?
Cześć Jibberish, oznaczyłeś właściwą odpowiedź, ale wciąż nie mogę zrozumieć, dlaczego odpowiedź jest właściwa, nawet nie mogę znaleźć, gdzie jest OnChangedCacheEntry ... Mam do czynienia z tym samym problemem, stan zawsze zerowy, czy możesz pomóc wyjaśnić trochę więcej? dzięki! –