MemoryCache.Set() 是线程安全的吗?
不幸的是,MemoryCache.Set 的 MSDN 文档没有明确说明它是线程安全的还是不是。
在没有显式锁定的情况下从多个线程使用 .Get()
和 .Set()
是否安全?
The MSDN documentation for MemoryCache.Set unfortunately doesn’t state explicitly whether it is thread-safe or not.
Is it safe to use .Get()
and .Set()
from several threads without an explicit lock?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的,MemoryCache 类 线程安全:
也就是说,Get 和 Set 方法是线程安全的,但如果您可能存储到此缓存中的数据结构不是线程安全的,您可能会遇到麻烦。例如,想象一下您在此缓存中存储了一本字典。然后,当线程 1 使用
Get
获取字典并开始从中读取时,线程 2 使用Get
获取同一字典并尝试写入它。虽然 Get 操作是线程安全的,但接下来发生的事情可能会非常糟糕。Yes, the MemoryCache class is thread safe:
This being said the Get and Set methods are thread safe but if the data structure you might be storing into this cache is not thread safe you might get into trouble. Imagine for example that you stored a dictionary inside this cache. Then while thread1 uses
Get
to fetch the dictionary and starts reading from it, thread2 usesGet
to fetch this same dictionary and tries to write to it. While the Get operation will be thread safe what will happen next could be pretty nasty.MemoryCache
指出:The documentation for
MemoryCache
states: