Asp.net core Asp.net内核、MemoryCache&;“的扩展”;Microsoft.Extensions.Caching.Memory“;是否为线程安全类型?

Asp.net core Asp.net内核、MemoryCache&;“的扩展”;Microsoft.Extensions.Caching.Memory“;是否为线程安全类型?,asp.net-core,caching,Asp.net Core,Caching,“Microsoft.Extensions.Caching.Memory”的Asp.net核心、MemoryCache和CacheExtensions是否为线程安全类型 我看了很多文件,但无法得出结论,因为它令人困惑。一些专业意见可能会有所帮助。尽管文档中没有明确说明,但它应该是线程安全的,否则您无法方便地使用它。这里是一些存档版本的源代码-您可以在内部看到使用了ConcurrentDictionary?看起来它在被锁定的可能性和性能之间进行了权衡。通常,缓存的数据应该在短时间内保持一致(因此,

“Microsoft.Extensions.Caching.Memory”的Asp.net核心、MemoryCache和CacheExtensions是否为线程安全类型


我看了很多文件,但无法得出结论,因为它令人困惑。一些专业意见可能会有所帮助。

尽管文档中没有明确说明,但它应该是线程安全的,否则您无法方便地使用它。这里是一些存档版本的源代码-您可以在内部看到使用了
ConcurrentDictionary
?看起来它在被锁定的可能性和性能之间进行了权衡。通常,缓存的数据应该在短时间内保持一致(因此,即使在竞争条件发生时,从缓存返回的结果之间也可能有一点差异或没有差异)。在那短暂的竞争条件之后,密钥已经被缓存了一个值,然后它就会正常工作。我在文档中没有提到可能导致工厂代码多次运行的竞争条件(这可能会返回不同的结果)。它不像我们通常期望的那样是完全线程安全的。如果您将一个大数据加载到一个缓存中,可能会花费很长时间,那么您应该编写自定义逻辑,以避免多次执行加载逻辑(这可能会大大消耗系统资源)。