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
Soenneker.Utils.RateLimiting.Factorydotnet add package Soenneker.Utils.RateLimiting.Factory
IRateLimitingFactory within DI (Program.cs).public static async Task Main(string[] args)
{
...
builder.Services.AddRateLimitingFactoryAsSingleton();
}
IRateLimitingFactory, and retrieve a RateLimitingFactory.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