Is there any point in keeping track of the classic bool disposed
field on an otherwise threadsafe type for the purposes of conditionally throwing an ObjectDisposedException
at the beginning of all primary exposed methods?
I've seen this pattern recommended in a few places online but I'm not sure if the authors are using it correctly, so this question assumes that they are.
In such a scenario, it seems that the only way to ensure that the disposed
condition is true beyond the condition's evaluation is to use a synchronization mechanism such as lock() over the entire body of each exposed member including the Dispose(bool) method. Wouldn't this make the type effectively single-threaded again?
And if this is true, then there'd be no point in using it, and therefore you can't rely on the ObjectDisposedException mechanism in some IDisposable implementations - so then why would we EVER employ this mechanism if it isn't necessary?
====
I guess IDisposable and ObjectDisposedException just don't go together for thread-safe types.