Я работаю с библиотекой MemoryCache и использую делегат updatecallback для обновления моего кэшированного объекта.Функция OnTimeUpdate вызывается каждый раз, когда срок действия кэшированного элемента истекает.
private void OnItemUpdate(CacheEntryUpdateArguments args)
{
var newItem = NewCopy();
try
{
T _ = newItem.GetItemAsync(null,
Info.UpdateMillisecondsTimeout).Result;
// Insert the new item
args.UpdatedCacheItem = new CacheItem(args.Key, newItem);
args.UpdatedCacheItemPolicy = newItem.GetPolicy();
}
catch (Exception)
{
args.UpdatedCacheItem = new CacheItem(args.Key, this);
args.UpdatedCacheItemPolicy = newItem.GetFailedPolicy();
}
}
Проблема заключается в том, что другой поток пытается удалить элемент при выполнении updatecallBack и вычислении нового элемента.Затем, когда новый элемент завершит пересчет, он заменит устаревший элемент кэша с помощью args.UpdateCacheItem и добавит запись в кэш, которая должна быть удалена.Есть ли способ заставить процесс 2 сосуществовать и иметь функцию удаления, останавливающую updateCallBack.Я думал об использовании оператора блокировки, чтобы предотвратить обновление, пока я удаляю элемент, но я не знаю, является ли это правильным способом достижения того, чего я хочу.Thks.