Microsoft.Extensions.Caching.Memory是否具备线程安全性?
关于Microsoft.Extensions.Caching.Memory的线程安全性问题
- 官方文档推荐使用
Microsoft.Extensions.Caching.Memory替代System.Runtime.Caching/MemoryCache,后者的线程安全性有明确文档说明,但前者未在文档中直接提及。 - 查看
Microsoft.Extensions.Caching.Memory的源码后,发现它是基于ConcurrentDictionary的包装类,能否据此认为它具备线程安全性?
回答
Microsoft.Extensions.Caching.Memory是线程安全的,理由如下:
- 它内部依赖
ConcurrentDictionary存储缓存项,而ConcurrentDictionary本身就是为多线程场景设计的线程安全集合,能保证基础增删改查操作的线程安全。 - 缓存的核心操作(如
Get、Set、Remove以及带过期策略的缓存项管理)都在ConcurrentDictionary的基础上做了额外线程安全处理,确保并发场景下缓存状态的一致性。 - 在ASP.NET Core的官方实践中,该缓存组件默认用于Web应用的并发请求环境——Web应用天然是多线程场景,若组件不具备线程安全性,官方不会将其作为推荐方案。
所以即使文档未直接标注,也可以放心在多线程场景下使用Microsoft.Extensions.Caching.Memory。
内容的提问来源于stack exchange,提问作者Wuloo
相关产品推荐
相关产品推荐

