close method
Stops every isolate, draining what each has in flight.
Implementation
Future<void> close({Duration drain = const Duration(seconds: 30)}) async {
final stopped = <Future<void>>[];
for (final handle in _handles) {
final reply = ReceivePort();
handle.send([drain.inMilliseconds, reply.sendPort]);
stopped.add(reply.first.then((_) => reply.close()));
}
await Future.wait(stopped).timeout(
drain + const Duration(seconds: 5),
onTimeout: () => const <void>[],
);
for (final isolate in _isolates) {
isolate.kill(priority: Isolate.immediate);
}
for (final worker in _workers) {
worker.dispose();
}
}