<PackageReference Include="Polly.Core" Version="8.0.0-alpha.2" />

TimeProviderExtensions

static class 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"); CancellationToken cancellationToken = context.CancellationToken; cancellationToken.ThrowIfCancellationRequested(); if (context.IsSynchronous && timeProvider == TimeProvider.System) { cancellationToken = context.CancellationToken; if (cancellationToken.CanBeCanceled) { cancellationToken = context.CancellationToken; cancellationToken.WaitHandle.WaitOne(delay); cancellationToken = context.CancellationToken; cancellationToken.ThrowIfCancellationRequested(); } else Thread.Sleep(delay); return Task.CompletedTask; } if (context.IsSynchronous) { timeProvider.Delay(delay, context.CancellationToken).GetAwaiter().GetResult(); return Task.CompletedTask; } return timeProvider.Delay(delay, context.CancellationToken); } } }