Parallel.For / PLINQ for CPU-bound work.
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)); |