MemoryCache.Set的MSDN 文档遗憾地没有明确说明它是否是线程安全的。
在没有显式锁定的情况下使用多个线程.Get()
是否安全?.Set()
MemoryCache.Set的MSDN 文档遗憾地没有明确说明它是否是线程安全的。
在没有显式锁定的情况下使用多个线程.Get()
是否安全?.Set()
是的,MemoryCache 类是线程安全的:
System.Runtime.Caching.MemoryCache 是线程安全的。多个并发线程可以读取和写入 MemoryCache 实例。内部线程安全被自动处理以确保缓存以一致的方式更新。
这可能指的是存储在缓存中的数据本身可能不是线程安全的。例如,如果一个 List 被放置在缓存中,并且两个单独的线程都获得了对缓存 List 的引用,那么如果两个线程都尝试同时更新该列表,则它们最终会互相踩踏。
这就是说 Get 和 Set 方法是线程安全的,但是如果您可能存储到此缓存中的数据结构不是线程安全的,您可能会遇到麻烦。例如,假设您在此缓存中存储了一个字典。然后当 thread1 用于Get
获取字典并开始从中读取时,thread2 用于Get
获取相同的字典并尝试写入它。虽然 Get 操作将是线程安全的,但接下来发生的事情可能会非常糟糕。
状态的文档MemoryCache
:
这种类型是线程安全的。