IDisposable,ObjectDisposedException和线程安全类型

Jas*_*ban 6 c# idisposable thread-safety objectdisposedexception

bool disposed为了ObjectDisposedException在所有主要暴露方法的开头有条件地抛出一个线程安全类型,有没有必要跟踪经典字段?

我已经在网上的几个地方看到了这种模式,但我不确定作者是否正确使用它,所以这个问题假定它们是.

在这种情况下,似乎disposed除了条件评估之外确保条件为真的唯一方法是在每个公开成员的整个主体上使用诸如lock()之类的同步机制,包括Dispose(bool)方法.难道这不会使类型再次有效地单线程吗?

如果这是真的,那么使用它就没有意义了,因此你不能在某些IDisposable实现中依赖ObjectDisposedException机制 - 那么为什么我们不采用这种机制,如果没有必要呢?

====

我猜IDisposable和ObjectDisposedException只是不一起用于线程安全类型.

Sam*_*eff 4

也许使线程安全对象在方法运行时不被释放的更有效方法是使用ReaderWriterLockSlim. 让所有公共方法在执行时获取读锁,并在完成后释放它。已Dispose获得写入锁。它将等到所有其他方法完成后才获得写锁。然后它会isDisposed在其独占的写入锁内设置。Dispose完成后对公共方法的任何调用都可以看到isDisposed并抛出ObjectDisposedException.

ReaderWriterLockSlim

http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx