Description
This tracker is for issues related to:
-
Dart VM
-
Dart SDK Version (
dart --version
)
Dart SDK version: 2.10.3 (stable) (Tue Oct 27 14:44:30 2020 +0100) on "linux_x64"
I tried to spawn a new isolate,but failed. I do not know why and how to figure it out . the error response like this:
startup tcp isolates failed, error: Invalid argument(s): Illegal argument in isolate message : (function types are not supported yet), stacktrace: #0 spawnFunction (dart:_internal-patch/internal_patch.dart:184:54)
#1 Isolate.spawn (dart:isolate-patch/isolate_patch.dart:380:7)
#2 IsolateServerTransport._spawn (package:trpc_dart/src/transport/isolate_server_transport.dart:38:35)
#3 IsolateServerTransport._spawnTCP (package:trpc_dart/src/transport/isolate_server_transport.dart:45:12)
#4 IsolateServerTransport.listenAndServeStream (package:trpc_dart/src/transport/isolate_server_transport.dart:60:39)
#5 DefaultServerTransport.listenAndServe (package:trpc_dart/src/transport/server_transport.dart:56:15)
#6 ServiceImpl.serve (package:trpc_dart/src/server/service.dart:138:28)
#7 Server.serve (package:trpc_dart/src/server/server.dart:56:19)
#8 main (file:///home/strongwu/code/trpc/trpc-dart/example/helloworld/bin/server.dart:23:18)
#9 _startIsolate. (dart:isolate-patch/isolate_patch.dart:299:32)
#10 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
here is my code:
top-level or static method
void workerEntryPoint(IsolateWorker worker) {
worker.start();
}
spawn
final worker = IsolateWorker(ctx, lsOpts, id, receivePort.sendPort, networkType);
final isolate = await Isolate.spawn(workerEntryPoint, worker, paused: true, debugName: id);
entrypoint message
class IsolateWorker {
SendPort supervisingSendPort;
ReceivePort supervisingReceivePort;
// simple class
Context ctx;
// simple class
ListenServeOptions lsOpts;
String id;
int networkType;
Stream<Socket> _listener;
RawDatagramSocket _udpConn;
IsolateWorker(this.ctx, this.lsOpts, this.id, this.supervisingSendPort, this.networkType);
Future start() async {
supervisingReceivePort = ReceivePort();
supervisingReceivePort.listen(listener);
logger.info('IsolateServer($id) listening, sending port');
supervisingSendPort.send(supervisingReceivePort.sendPort);
....
}
}