Simple rate limiters for resources in C#.
$ dotnet add package RateLimitSharpSimple rate limiters for resources in C#.
This library was created in response to the over-engineered rate limiters in System.Threading.RateLimiting.
The recommended rate limiter for most cases is IncrementalTokenBucketKeyedRateLimiter.
A rate limiter per key that you release manually.
using ManualKeyedRateLimiter rateLimiter = new(limit: 3);
// Add a claim for John Doe.
bool available = rateLimiter.TryAcquire("John Doe");
// Remove a claim from John Doe.
rateLimiter.Release("John Doe");
A rate limiter per key that automatically releases claims a fixed interval after being acquired.
using TokenBucketKeyedRateLimiter rateLimiter = new(limit: 3, interval: TimeSpan.FromSeconds(1.0));
// Add two claims for John Doe.
bool available = rateLimiter.TryAcquire("John Doe", amount: 2);
// Both claims will be removed after 1 second.
A rate limiter per key that automatically releases a claim in a queued manner every interval.
using IncrementalTokenBucketKeyedRateLimiter rateLimiter = new(limit: 3, incrementalInterval: TimeSpan.FromSeconds(1.0));
// Add two claims for John Doe.
bool available = rateLimiter.TryAcquire("John Doe", amount: 2);
// One claim will be removed after 1 second and another will be removed after 2 seconds.