An async thread-safe singleton dictionary for Soenneker.Utils.RateLimiting.Executors, designed to manage the rate at which tasks are executed.
dotnet add package Soenneker.Utils.RateLimiting.Factory
- Register
IRateLimitingFactory
within DI (Program.cs
).
public static async Task Main(string[] args)
{
...
builder.Services.AddRateLimitingFactoryAsSingleton();
}
- Inject
IRateLimitingFactory
, and retrieve aRateLimitingFactory
.
Example:
public class TestClass
{
IRateLimitingFactory _factory;
public TestClass(IRateLimitingFactory factory)
{
_factory = factory;
}
public async ValueTask ExecuteTasks()
{
RateLimitingExecutor rateLimitingExecutor = await _factory.Get("test", TimeSpan.FromSeconds(2));
for (int i = 0; i < 5; i++)
{
await rateLimitingExecutor.Execute(async ct =>
{
Logger.LogInformation($"Executing Task {i + 1} at {DateTime.Now:HH:mm:ss}");
await Task.Delay(100, ct); // Simulate some work
});
}
}
}
Executing Task 1 at 14:00:00
Executing Task 2 at 14:00:02
Executing Task 3 at 14:00:04
Executing Task 4 at 14:00:06
Executing Task 5 at 14:00:08