当前Dart环境:
Dart VM版本:“ linux_x64”上的2.0.0-dev.69.0(未知时间戳记)
我正在尝试通过 Isolate 。 spawnUri 方法生成一个隔离,并在消息中包含一个 SendPort 。我的代码设置如下:
import 'dart:convert' show json;
import 'dart:isolate';
var servicePort = new ReceivePort()
..listen (/stuff to handle response/);
Map isolateRequest = {
'sendPort': servicePort.sendPort, <-- String => SendPort
'info': json.encode (/info to send to spawned isolate/) <-- String => String
};
Isolate.spawnUri (new Uri.file (/isolate main/), [], isolateRequest);
这种类型的设置曾经可以使用。现在,我收到以下错误:
“无效参数:隔离消息中的参数非法:(对象是常规Dart实例)”
地图的两个键是字符串,值包括 SendPort 和另一个字符串。简单,没什么花哨的,并且应该作为生成隔离的消息来发送(直到几天前工作得很好)。
问题:我现在做错了什么?有什么可能的解决方法?
任何帮助将不胜感激。
答案 0 :(得分:0)
对于我来说,这不是使用2.0.0-dev.69.0标记(-版本是:Dart VM版本:2.0.0-dev.69.0(从7月17日星期二14:57:16开始) 2018 +0200)在“ linux_x64”上。
使用此完整程序:
import 'dart:convert' show json;
import 'dart:isolate';
main(args, message) {
if (message != null) {
print("Out, ");
message["sendPort"].send("And home again!");
return;
}
var servicePort = new ReceivePort();
servicePort.forEach((m) {
print(m);
servicePort.close();
});
Map isolateRequest = {
'sendPort': servicePort.sendPort, // <-- String => SendPort
'info': json.encode({}) // <-- String => String
};
Isolate.spawnUri (new Uri(path:"iso.dart"), [], isolateRequest);
}
它运行并打印预期的行。
隔离请求的确看起来应该是可序列化的(带有字符串键和值为字符串或SendPort
的值的映射), else 必须在不属于您的代码中进行显示。
您可以从仍然表现出这种行为的代码中提取一个可运行的程序,还是说一些有关代码周围发生的事情?