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, "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);
}
}
}