runParallel method
Run multiple processes in parallel with optional concurrency limit.
Implementation
Future<List<ProcessOutput>> runParallel(
List<ProcessConfig> configs, {
int? maxConcurrency,
}) async {
if (maxConcurrency == null || maxConcurrency >= configs.length) {
return Future.wait(configs.map(run));
}
final results = List<ProcessOutput?>.filled(configs.length, null);
final pool = ProcessPool(maxConcurrency: maxConcurrency, manager: this);
final futures = <Future<void>>[];
for (var i = 0; i < configs.length; i++) {
final idx = i;
futures.add(pool.submit(configs[idx]).then((r) => results[idx] = r));
}
await Future.wait(futures);
await pool.close();
return results.cast<ProcessOutput>();
}