callAll method

Future<List<Object?>> callAll(
  1. String name,
  2. List<List<Object?>> argumentSets
)

Calls the export name once for every entry of argumentSets, spread over the workers so that they really run in parallel.

The results keep the order of argumentSets.

Implementation

Future<List<Object?>> callAll(
  String name,
  List<List<Object?>> argumentSets,
) async {
  final results = List<Object?>.filled(argumentSets.length, null);
  final buckets = List.generate(workerCount, (_) => <int>[]);
  for (var i = 0; i < argumentSets.length; i++) {
    buckets[i % workerCount].add(i);
  }
  await Future.wait([
    for (var worker = 0; worker < workerCount; worker++)
      () async {
        for (final index in buckets[worker]) {
          results[index] = await _instances[worker].invoke(
            name,
            argumentSets[index],
          );
        }
      }(),
  ]);
  return results;
}