callAll method
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;
}