run method
Run the isolate
Implementation
Future<void> run([List<dynamic> args = const <dynamic>[]]) async {
//print("I > run");
final _comChanCompleter = Completer<void>();
// set runner config
final runner = IsoRunner(chanOut: _fromIsolateReceivePort.sendPort);
if (args.isNotEmpty) runner.args = args;
// run
await Isolate.spawn(runFunction, runner,
onError: _fromIsolateErrorPort.sendPort)
.then((Isolate _is) {
_isolate = _is;
_fromIsolateReceivePort.listen((dynamic data) {
if (_toIsolateSendPort == null && data is SendPort) {
_toIsolateSendPort = data;
//print("I > com port received $data");
_comChanCompleter.complete();
} else {
//print("I > DATA OUT $data");
_dataOutIsolate.sink.add(data);
onDataOut!(data);
}
}, onError: (dynamic err) {
_fromIsolateErrorPort.sendPort.send(err);
});
_fromIsolateErrorPort.listen((dynamic err) {
onError!(err);
});
//print("I > init data in");
//runner.initDataIn();
return;
});
await _comChanCompleter.future;
_isolateReadyToListenCompleter.complete();
_canReceive = true;
}