Beispiel #1
0
        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));
            }
        }
Beispiel #2
0
        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;
 }