Я использую System.Runtime.Caching.MemoryCache
для хранения элементов, срок действия которых никогда не истекает. Однако иногда мне нужна возможность очистить весь кеш. Как мне это сделать?
Я задал аналогичный вопрос здесь относительно того, могу ли я перечислить кэш, но это плохая идея, так как он должен быть синхронизирован во время перечисления.
Я пробовал использовать .Trim (100)
, но это совсем не сработало.
Я попытался получить список всех ключей через Linq, но затем вернулся к тому месту, с которого начал, потому что удаление элементов по одному может легко привести к состоянию гонки.
Я решил сохранить все ключи, а затем выдать .Remove (key)
для каждого из них, но здесь также присутствует подразумеваемое состояние гонки, поэтому мне нужно заблокировать доступ к списку ключей, и все снова запутается.
Затем я подумал, что смогу вызвать .Dispose ()
для всего кеша, но я не уверен, что это лучший подход, из-за способа его реализации.
Использование ChangeMonitors
не подходит для моего дизайна и излишне сложно для такого тривиального требования.
Итак, как мне полностью очистить кеш?