<PackageReference Include="Polly" Version="8.0.0-beta.1" />

RateLimitEngine

static class RateLimitEngine
using System; using System.Runtime.CompilerServices; using System.Threading; namespace Polly.RateLimit { internal static class RateLimitEngine { [System.Runtime.CompilerServices.NullableContext(1)] internal static TResult Implementation<[System.Runtime.CompilerServices.Nullable(2)] TResult>(IRateLimiter rateLimiter, [System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1, 1 })] Func<TimeSpan, Context, TResult> retryAfterFactory, Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken) { (bool permitExecution, TimeSpan retryAfter) valueTuple = rateLimiter.PermitExecution(); bool item = valueTuple.permitExecution; TimeSpan item2 = valueTuple.retryAfter; if (item) return action(context, cancellationToken); if (retryAfterFactory != null) return retryAfterFactory(item2, context); throw new RateLimitRejectedException(item2); } } }