MemoryCache.Set()线程安全吗?

Tim*_*mwi 34 c# thread-safety memorycache

遗憾的是,MemoryCache.SetMSDN文档没有明确说明它是否是线程安全的.

是否可以安全地使用.Get()并且.Set()没有显式锁定的几个线程?

Dar*_*rov 71

是的,MemoryCache类是线程安全的:

System.Runtime.Caching.MemoryCache是​​线程安全的.多个并发线程可以读写MemoryCache实例.自动处理内部线程安全,以确保以一致的方式更新缓存.

这可能是指存储在缓存中的数据本身可能不是线程安全的.例如,如果List放在缓存中,并且两个单独的线程都获得对缓存List的引用,那么如果两个线程都尝试同时更新列表,则它们将最终相互踩踏.

这就是说Get和Set方法是线程安全的,但是如果你可能存储到这个缓存中的数据结构不是线程安全的,那么你可能会遇到麻烦.想象一下,例如,您在此缓存中存储了一个字典.然后当thread1用于Get获取字典并开始从中读取时,thread2 Get用来获取同一个字典并尝试写入它.虽然Get操作将是线程安全的,但接下来发生的事情可能非常糟糕.

  • 我很抱歉,但是我很好奇应该如何处理这样的情况.你可以详细说明一下吗? (2认同)

jas*_*son 10

MemoryCache各州的文件:

这种类型是线程安全的.

  • OMG我真的没有想到查看*类型*的文档而不是单独的*方法*... (2认同)