AsyncRateLimitPolicy<TResult>
public class AsyncRateLimitPolicy<TResult> : AsyncPolicy<TResult>, IRateLimitPolicy<TResult>, IRateLimitPolicy, IsPolicy
A rate-limit policy that can be applied to asynchronous delegates returning a value of type TResult.
using System;
using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace Polly.RateLimit
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(new byte[] {
0,
1
})]
public class AsyncRateLimitPolicy<[System.Runtime.CompilerServices.Nullable(2)] TResult> : AsyncPolicy<TResult>, IRateLimitPolicy<TResult>, IRateLimitPolicy, IsPolicy
{
private readonly IRateLimiter _rateLimiter;
[System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1,
1
})]
private readonly Func<TimeSpan, Context, TResult> _retryAfterFactory;
internal AsyncRateLimitPolicy(IRateLimiter rateLimiter, [System.Runtime.CompilerServices.Nullable(new byte[] {
2,
1,
1
})] Func<TimeSpan, Context, TResult> retryAfterFactory)
: base((PolicyBuilder<TResult>)null)
{
if (rateLimiter == null)
throw new ArgumentNullException("rateLimiter");
_rateLimiter = rateLimiter;
_retryAfterFactory = retryAfterFactory;
}
[DebuggerStepThrough]
protected override Task<TResult> ImplementationAsync(Func<Context, CancellationToken, Task<TResult>> action, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext)
{
if (action == null)
throw new ArgumentNullException("action");
return AsyncRateLimitEngine.ImplementationAsync<TResult>(_rateLimiter, _retryAfterFactory, action, context, continueOnCapturedContext, cancellationToken);
}
}
}