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