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