runParallel method

Future<List<ProcessOutput>> runParallel(
  1. List<ProcessConfig> configs, {
  2. int? maxConcurrency,
})

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>();
}