public async Task ExecuteAsync(Func <CancellationToken, Task <bool> > function, CancellationToken cancellationToken, Action shutdownAction = null) { if (_delayOnExecute) { await _taskDelay.Delay(_interval, cancellationToken); } bool shouldContinue = !cancellationToken.IsCancellationRequested; while (shouldContinue) { shouldContinue = await function(cancellationToken); if (shouldContinue) { try { await _taskDelay.Delay(_interval, cancellationToken); } catch (TaskCanceledException) { } shouldContinue = !cancellationToken.IsCancellationRequested; } } shutdownAction?.Invoke(); }
public async Task ExecuteAsync(Action <CancellationToken> action, CancellationToken cancellationToken, Action shutdownAction = null) { if (_delayOnExecute) { await _taskDelay.Delay(_interval, cancellationToken); } while (!cancellationToken.IsCancellationRequested) { using (CancellationTokenSource timeLimitedTask = new CancellationTokenSource(_interval)) { await Task.WhenAll(_threadPoolExecuter.Run(() => action(cancellationToken), timeLimitedTask.Token), _taskDelay.Delay(_interval, cancellationToken)); } } shutdownAction?.Invoke(); }