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