Asp.net Core, MemoryCache и CacheExtensions из "Microsoft.Extensions.Caching.Memory" являются потокобезопасными типами или нет?
Я просматриваю множество документов, но не могу сделать вывод, так как это сбивает с толку. Некоторые мнения экспертов были бы полезны.
вы прошли через это? blog.novanet.no/…
похоже, что это компромисс между возможностью блокировки и производительностью. Обычно ваши кэшированные данные должны быть согласованы в течение короткого времени (так что даже когда возникает состояние гонки, между результатами, возвращаемыми из кеша, может быть небольшое или нулевое различие). После этого короткого периода состояния гонки ключ уже кэшируется с одним значением, и тогда он будет работать нормально.
Я пропустил этот момент в документации, где говорится о возможном состоянии гонки, при котором код фабрики запускается несколько раз (что может возвращать разные результаты). Это не совсем потокобезопасный, как мы обычно ожидаем.
если вы загружаете большие данные в кеш, что может занять некоторое время, вам следует написать свою собственную логику, чтобы избежать многократного выполнения логики загрузки (что может значительно потреблять системные ресурсы).





хотя в документации это четко не указано, но он должен быть потокобезопасным, иначе вы не сможете использовать его удобно. И здесь используется исходный код некоторой заархивированной версии github.com/aspnet/caching/blob/master/src/… - вы можете видеть, что внутри используется
ConcurrentDictionary.