private void Dispose(bool disposing) { if (disposing) { if (WorkerCancellationTokenSource != null || WorkerCancelTimeoutKillTokenSource != null) { lock (_lock) { if (WorkerCancellationTokenSource != null) { WorkerCancellationTokenSource.Dispose(); WorkerCancellationTokenSource = null; } if (WorkerCancelTimeoutKillTokenSource != null) { WorkerCancelTimeoutKillTokenSource.Dispose(); WorkerCancelTimeoutKillTokenSource = null; } } } } }
public bool Cancel(TimeSpan timeout) { if (WorkerCancellationTokenSource != null && WorkerCancelTimeoutKillTokenSource != null) { lock (_lock) { if (WorkerCancellationTokenSource != null && WorkerCancelTimeoutKillTokenSource != null) { WorkerCancellationTokenSource.Cancel(); // make sure we have at least 60 seconds for cancellation. if (timeout.TotalSeconds < 60) { timeout = TimeSpan.FromSeconds(60); } WorkerCancelTimeoutKillTokenSource.CancelAfter(timeout.Subtract(TimeSpan.FromSeconds(15))); return(true); } } } return(false); }