在使用System.Runtime.Caching.MemoryCache例如调用时是否还需要实现锁定Contains(key);?还是已经是线程安全的?
MSDN Library中有关类的文章中的"线程安全"部分记录了这一点:
任何实例成员都不保证是线程安全的.
这对于.NET类来说是很正常的,文档是样板文件,并且在一些选定的情况下没有信息.在文档更新之前,MemoryCache就是这种情况.由Davide链接的Connect反馈文章有助于清除这一点:
System.Runtime.Caching.MemoryCache是线程安全的.多个并发线程可以读写MemoryCache实例.自动处理内部线程安全,以确保以一致的方式更新缓存.
这可能是指存储在缓存中的数据本身可能不是线程安全的.例如,如果List放在缓存中,并且两个单独的线程都获得对缓存List的引用,那么如果两个线程都尝试同时更新列表,则它们将最终相互踩踏.