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