预期" Hello world"从下面显示的简单隔离代码&没有工作。
import 'dart:async';
import 'dart:isolate';
var mainReceivePort = new ReceivePort();
main() async {
await Isolate.spawn(hello, null);
await for (var msg in mainReceivePort) {
print(msg);
return;
}
}
hello(_) async {
var sendPort = mainReceivePort.sendPort;
sendPort.send("Hello world");
}
如果对代码进行了以下更改,则按预期工作
import 'dart:async';
import 'dart:isolate';
var mainReceivePort = new ReceivePort();
main() async {
await Isolate.spawn(hello, mainReceivePort.sendPort);
await for (var msg in mainReceivePort) {
print(msg);
return;
}
}
hello(sendPort) async {
sendPort.send("Hello world");
}
寻找线索。有什么想法吗?
答案 0 :(得分:1)
在第一个示例中,sendPort未连接到主隔离,它仅存在于生成的隔离中。
此代码在两个隔离区中执行
var mainReceivePort = new ReceivePort();
并且每个隔离区都会获得一个不以任何方式连接的mainReceivePort
实例。
在第二个示例中,连接到主隔离的sendPort
的{{1}}被传递给生成的隔离,传递给它的消息将由主隔离的连接mainReceivePort
接收