更新和删除缓存条目时,MemoryCache的并发问题

时间:2018-11-26 22:16:48

标签: c# .net memorycache

我正在使用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。

0 个答案:

没有答案