PollyRateLimiter 1.0.2

dotnet add package PollyRateLimiter --version 1.0.2
                    
NuGet\Install-Package PollyRateLimiter -Version 1.0.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PollyRateLimiter" Version="1.0.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="PollyRateLimiter" Version="1.0.2" />
                    
Directory.Packages.props
<PackageReference Include="PollyRateLimiter" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add PollyRateLimiter --version 1.0.2
                    
#r "nuget: PollyRateLimiter, 1.0.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package PollyRateLimiter@1.0.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=PollyRateLimiter&version=1.0.2
                    
Install as a Cake Addin
#tool nuget:?package=PollyRateLimiter&version=1.0.2
                    
Install as a Cake Tool

PollyRateLimiter

NuGet Build

Convenience extension methods for Polly v8 resilience pipelines.

Polly v8 ships with AddConcurrencyLimiter out of the box, but leaves FixedWindow, SlidingWindow, and TokenBucket as bring-your-own. This package fills that gap with one-liner extension methods for all three strategies on top of System.Threading.RateLimiting.

Install

dotnet add package PollyRateLimiter

Usage

using PollyRateLimiter;

// Fixed window: 100 requests per second
var pipeline = new ResiliencePipelineBuilder()
    .AddFixedWindowRateLimiter(permitLimit: 100, window: TimeSpan.FromSeconds(1))
    .Build();

// Sliding window: 100 requests per second, smoothed into 4 segments
var pipeline = new ResiliencePipelineBuilder()
    .AddSlidingWindowRateLimiter(permitLimit: 100, window: TimeSpan.FromSeconds(1), segmentsPerWindow: 4)
    .Build();

// Token bucket: burst up to 200, replenish 50 per second
var pipeline = new ResiliencePipelineBuilder()
    .AddTokenBucketRateLimiter(tokenLimit: 200, tokensPerPeriod: 50, replenishmentPeriod: TimeSpan.FromSeconds(1))
    .Build();

Queue limit

By default, executions that exceed the limit are rejected immediately (queueLimit: 0). Pass a positive value to queue them instead:

var pipeline = new ResiliencePipelineBuilder()
    .AddFixedWindowRateLimiter(permitLimit: 10, window: TimeSpan.FromSeconds(1), queueLimit: 5)
    .Build();

OnRejected callback

Use the optional configure callback to attach an OnRejected handler or change other RateLimiterStrategyOptions:

var pipeline = new ResiliencePipelineBuilder()
    .AddTokenBucketRateLimiter(
        tokenLimit: 100,
        tokensPerPeriod: 20,
        replenishmentPeriod: TimeSpan.FromSeconds(1),
        configure: opts => opts.OnRejected = args =>
        {
            logger.LogWarning("Rate limit exceeded. RetryAfter: {RetryAfter}", args.Lease.TryGetMetadata(MetadataName.RetryAfter, out var retry) ? retry : TimeSpan.Zero);
            return ValueTask.CompletedTask;
        })
    .Build();

Generic builder

All methods work with ResiliencePipelineBuilder<T> too:

var pipeline = new ResiliencePipelineBuilder<HttpResponseMessage>()
    .AddFixedWindowRateLimiter(permitLimit: 50, window: TimeSpan.FromSeconds(1))
    .AddRetry(new RetryStrategyOptions<HttpResponseMessage>())
    .Build();

Comparison with Polly built-ins

Strategy Polly built-in PollyRateLimiter
Concurrency AddConcurrencyLimiter(maxConcurrency)
Fixed window AddFixedWindowRateLimiter(permits, window)
Sliding window AddSlidingWindowRateLimiter(permits, window)
Token bucket AddTokenBucketRateLimiter(capacity, perPeriod, period)

License

MIT

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.2 80 6/22/2026
1.0.0 86 6/17/2026

1.0.1: Added net9.0 target; fixed Authors field; added XML IntelliSense documentation; improved discoverability tags; added Copyright.