/// <summary> /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// </summary> protected override void Dispose(bool disposing) { if (!disposing) { return; } if (Interlocked.Increment(ref _disposeCount) != 1) { return; } //stop monitor process(es) _queueMonitor.Stop(); //tell the worker to stop if (_primaryWorker.IsValueCreated) { _stopWorker.SetCancelTokenForStopping(); _stopWorker.StopPrimary(_primaryWorker.Value); _primaryWorker.Value.UserException -= LogUserException; _primaryWorker.Value.SystemException -= LogSystemException; _primaryWorker.Value.Dispose(); } base.Dispose(true); }
/// <summary> /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// </summary> protected override void Dispose(bool disposing) { if (!disposing) { return; } if (Interlocked.Increment(ref _disposeCount) != 1) { return; } ShouldWork = false; _queueMonitor.Stop(); if (_primaryWorker.IsValueCreated) { //stop looking for pending work _stopWorker.SetCancelTokenForStopping(); _stopWorker.StopPrimary(_primaryWorker.Value); _primaryWorker.Value.UserException -= LogUserException; _primaryWorker.Value.SystemException -= LogSystemException; _primaryWorker.Value.Dispose(); } base.Dispose(true); }