public static async Task UntilCancelled(CancellationToken cancellationToken, Func <Task> callback) { if (cancellationToken.IsCancellationRequested) { return; } await Task.Yield(); IRepeatPolicy repeatPolicy = UntilCancelled(cancellationToken); using (IRepeatContext repeatContext = repeatPolicy.GetRepeatContext()) { TimeSpan delay = TimeSpan.Zero; do { if (cancellationToken.IsCancellationRequested) { break; } if (delay > TimeSpan.Zero) { await Task.Delay(delay, repeatContext.CancellationToken).ConfigureAwait(false); } if (cancellationToken.IsCancellationRequested) { break; } await callback().ConfigureAwait(false); }while (repeatContext.CanRepeat(out delay)); } }
public static async Task UntilCancelled(CancellationToken cancellationToken, Func <Task> callback) { IRepeatPolicy repeatPolicy = UntilCancelled(cancellationToken); using (IRepeatContext repeatContext = repeatPolicy.GetRepeatContext()) { TimeSpan delay = TimeSpan.Zero; do { if (delay > TimeSpan.Zero) { await Task.Delay(delay, repeatContext.CancellationToken); } await callback(); }while (repeatContext.CanRepeat(out delay)); } }
public RepeatFilter(IRepeatPolicy repeatPolicy) { _repeatPolicy = repeatPolicy; }