public void Dispose() { if (_isDisposed) { return; } if (_isDisposing.ExchangeValue(true)) { return; } Dispose(true); _isDisposing = false; _isDisposed = true; // Use SuppressFinalize in case a subclass implements a finalizer. GC.SuppressFinalize(this); }