C# parallelism: Task.WhenAll and Parallel.ForEachAsync with MaxDegreeOfParallelism

C# Language Interview Q&A November 13, 2026 csharp

Parallel.For / PLINQ for CPU-bound work.

csharp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// ======================================================================
// Q: How do you run work in parallel and limit concurrency?
//
// Parallel.For / PLINQ for CPU-bound work. Task.WhenAll with no limit over
// 10,000 items = 10,000 concurrent calls.
// ======================================================================

// Independent I/O calls: concurrently
var stockTask = erp.GetWarehouseStockAsync(sku, ct);
var daysTask  = erp.GetDeliveryDaysAsync(sku, ct);
await Task.WhenAll(stockTask, daysTask);          // time = the slowest one, not the sum

// Many items with a limit on concurrent calls (so you don't take down the ERP)
await Parallel.ForEachAsync(skus,
    new ParallelOptions { MaxDegreeOfParallelism = 4, CancellationToken = ct },
    async (sku, token) => await SyncPriceAsync(sku, token));