https://github.com/soenneker/soenneker.concurrentprocessing.executor
A util that runs multiple async tasks concurrently with features for limiting and retry
https://github.com/soenneker/soenneker.concurrentprocessing.executor
concurrent concurrentprocessing concurrentprocessingexecutor csharp dotnet executor limit parallel processing retry tasks util valuetasks
Last synced: 13 days ago
JSON representation
A util that runs multiple async tasks concurrently with features for limiting and retry
- Host: GitHub
- URL: https://github.com/soenneker/soenneker.concurrentprocessing.executor
- Owner: soenneker
- License: mit
- Created: 2025-02-07T14:14:00.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2026-01-15T19:31:19.000Z (19 days ago)
- Last Synced: 2026-01-16T22:07:10.331Z (18 days ago)
- Topics: concurrent, concurrentprocessing, concurrentprocessingexecutor, csharp, dotnet, executor, limit, parallel, processing, retry, tasks, util, valuetasks
- Language: C#
- Homepage: https://soenneker.com
- Size: 562 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: .github/CODE_OF_CONDUCT.md
- Security: .github/SECURITY.md
Awesome Lists containing this project
README
[](https://www.nuget.org/packages/soenneker.concurrentprocessing.executor/)
[](https://github.com/soenneker/soenneker.concurrentprocessing.executor/actions/workflows/publish-package.yml)
[](https://www.nuget.org/packages/soenneker.concurrentprocessing.executor/)
#  Soenneker.ConcurrentProcessing.Executor
This executor efficiently handles multiple tasks with controlled concurrency. It is ideal for managing parallel execution of tasks while ensuring that no more than a specified number of tasks run simultaneously.
### **Key Features**
- **Concurrent Execution:** Limits the number of concurrent tasks to prevent overloading.
- **Failure Handling with Retry Logic:** Automatically retries failed tasks with exponential backoff.
- **Async Semaphore:** Uses a non-blocking semaphore to control concurrency and ensure thread safety.
- **CancellationToken support** for task cancellation.
⚠️ **Note:**
- This is not a background processor. It **only** manages concurrency for tasks that are provided during execution.
---
### **Installation**
```
dotnet add package Soenneker.ConcurrentProcessing.Executor
```
---
### **Example: Executing Multiple Tasks with Concurrency Control**
```csharp
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Soenneker.ConcurrentProcessing.Executor;
public class Program
{
public static async Task Main(string[] args)
{
var executor = new ConcurrentProcessingExecutor(maxConcurrency: 3);
var tasks = new List>
{
async (ct) => {
Console.WriteLine("Task 1 started");
await Task.Delay(500, ct);
Console.WriteLine("Task 1 completed");
},
async (ct) => {
Console.WriteLine("Task 2 started");
await Task.Delay(300, ct);
Console.WriteLine("Task 2 completed");
},
async (ct) => {
Console.WriteLine("Task 3 started");
await Task.Delay(700, ct);
Console.WriteLine("Task 3 completed");
},
async (ct) => {
Console.WriteLine("Task 4 started");
await Task.Delay(400, ct);
Console.WriteLine("Task 4 completed");
}
};
await executor.Execute(tasks);
}
}
```
### **Console Output**
```shell
Task 1 started
Task 2 started
Task 3 started
Task 1 completed
Task 4 started
Task 2 completed
Task 3 completed
Task 4 completed
```