我正在使用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进程共存并具有remove函数来停止updateCallBack。我考虑过使用lock语句来防止在我删除项目时进行更新,但是我不知道这是否是实现我想要的正确方法。 ks。