Documentation Index
Fetch the complete documentation index at: https://mintlify.com/App-vNext/Polly/llms.txt
Use this file to discover all available pages before exploring further.
The rate limiter strategy controls the rate of executions to prevent resource exhaustion and ensure fair usage.
RateLimiterStrategyOptions
Configures the rate limiter resilience strategy.
public class RateLimiterStrategyOptions : ResilienceStrategyOptions
Properties
RateLimiter
Func<RateLimiterArguments, ValueTask<RateLimitLease>>?
default:"null"
A rate limiter delegate that produces RateLimitLease instances.If null, the strategy uses a ConcurrencyLimiter created with DefaultRateLimiterOptions.
DefaultRateLimiterOptions
ConcurrencyLimiterOptions
required
The default rate limiter options used when RateLimiter is null.Default configuration:
PermitLimit: 1000
QueueLimit: 0
OnRejected
Func<OnRateLimiterRejectedArguments, ValueTask>?
default:"null"
An event raised when the execution of a user-provided callback is rejected by the rate limiter.
Extension Methods
Add rate limiter strategies to a resilience pipeline:
public static ResiliencePipelineBuilder AddRateLimiter(
this ResiliencePipelineBuilder builder,
RateLimiterStrategyOptions options)
public static ResiliencePipelineBuilder<TResult> AddRateLimiter<TResult>(
this ResiliencePipelineBuilder<TResult> builder,
RateLimiterStrategyOptions options)
Usage Examples
Using Default Concurrency Limiter
using System.Threading.RateLimiting;
var rateLimiterOptions = new RateLimiterStrategyOptions
{
DefaultRateLimiterOptions = new ConcurrencyLimiterOptions
{
PermitLimit = 100,
QueueLimit = 50
},
OnRejected = args =>
{
Console.WriteLine("Rate limit exceeded!");
return ValueTask.CompletedTask;
}
};
var pipeline = new ResiliencePipelineBuilder()
.AddRateLimiter(rateLimiterOptions)
.Build();
Using Custom Rate Limiter
using System.Threading.RateLimiting;
var tokenBucket = new TokenBucketRateLimiter(new TokenBucketRateLimiterOptions
{
TokenLimit = 100,
TokensPerPeriod = 10,
ReplenishmentPeriod = TimeSpan.FromSeconds(1),
QueueLimit = 0
});
var rateLimiterOptions = new RateLimiterStrategyOptions
{
RateLimiter = args => tokenBucket.AcquireAsync(permitCount: 1, args.Context.CancellationToken)
};
var pipeline = new ResiliencePipelineBuilder()
.AddRateLimiter(rateLimiterOptions)
.Build();
Sliding Window Rate Limiter
var slidingWindow = new SlidingWindowRateLimiter(new SlidingWindowRateLimiterOptions
{
PermitLimit = 100,
Window = TimeSpan.FromMinutes(1),
SegmentsPerWindow = 6
});
var rateLimiterOptions = new RateLimiterStrategyOptions
{
RateLimiter = args => slidingWindow.AcquireAsync(permitCount: 1, args.Context.CancellationToken)
};
Built-in Rate Limiters
.NET provides several built-in rate limiters in the System.Threading.RateLimiting namespace:
- ConcurrencyLimiter: Limits the number of concurrent executions
- TokenBucketRateLimiter: Token bucket algorithm
- SlidingWindowRateLimiter: Sliding window algorithm
- FixedWindowRateLimiter: Fixed window algorithm