/// <summary> /// Note: RunAsync and Start ping-pong between each other. /// </summary> /// <returns></returns> private async Task RunAsync() { bool result = false; try { _cancellationTokenSource = new CancellationTokenSource(); result = await _work(_cancellationTokenSource.Token); } catch (Exception exception) { TheTrace.TraceWarning(exception.ToString()); } if (result) { _interval.Reset(); } else { await Task.Delay(_interval.Next()); } if (_isWorking) { Start(); } }
private void Run() { while (true) { if (!_isWorking) { break; } if (_work.WrapException(true)) { _interval.Reset(); } else { Thread.Sleep(_interval.Next()); } } }
private void Run() { while (true) { if (!_isWorking) { break; } if (_work.WrapException(true)) { _interval.Reset(); } else { _resetEvent.WaitOne(_interval.Next()); } } }