TimeProviderExtensions
Extensions for  TimeProvider used by resilience strategies.
            
                using System;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace Polly.Utils
{
    internal static class TimeProviderExtensions
    {
        [System.Runtime.CompilerServices.NullableContext(1)]
        public static Task DelayAsync(this TimeProvider timeProvider, TimeSpan delay, ResilienceContext context)
        {
            Guard.NotNull(timeProvider, "timeProvider");
            Guard.NotNull(context, "context");
            context.CancellationToken.ThrowIfCancellationRequested();
            if (delay == TimeSpan.MaxValue)
                delay = System.Threading.Timeout.InfiniteTimeSpan;
            if (context.IsSynchronous) {
                TimeProviderTaskExtensions.Delay(timeProvider, delay, context.CancellationToken).GetAwaiter().GetResult();
                return Task.CompletedTask;
            }
            return TimeProviderTaskExtensions.Delay(timeProvider, delay, context.CancellationToken);
        }
    }
}