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