public virtual void Dispose() { if (Interlocked.Increment(ref _disposeCount) == 1) { _shouldExitLock.Dispose(); } }