Проблема параллелизма с MemoryCache при обновлении и удалении записи в кэше - PullRequest
0 голосов
/ 27 ноября 2018

Я работаю с библиотекой 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.

...