【发布时间】:2013-12-16 08:54:50
【问题描述】:
我必须创建一次性对象的线程安全缓存。我怎么看:
- 我有一些数据类,我想缓存,例如 MyData
- 我正在为 MyData 创建一些集合(例如 ConcurrentDictionary)
- 我有使用某个键创建 MyData 新实例的方法。
- 当我需要获取某个键的 MyData 时,我会检查它是否存在于我的存储中 - 然后从集合中使用它,否则创建新实例并将其放入集合中
- 我有一些事件,当我应该使缓存无效时。在此事件中,我清除存储空间。
问题是 MyData 是一次性的。我不知道什么时候应该调用 Dispose 方法。在 clear-cache 事件上清除集合时,我无法调用 Dispose 方法,因为某些线程可以立即使用 MyData 的此实例。
我应该选择什么模式?
【问题讨论】:
-
如果您的对象在许多消费者之间共享,那么谁调用
Dispose并不重要;所有消费者必须合作,让事情顺利进行。也许你应该准备好赶上ObjectDisposedException。 -
对象是同一类型吗?
-
@LasseV.Karlsen 它有什么区别,它们都是 IDissposable 的相同类型?
标签: c# multithreading caching idisposable