Isolate相关的问题
最近在学flutter,所以刚接触了dart,遇到了一个关于isolate的问题:
我想实现一个简单的案例,子线程给主线程发送一些数据(包含'hello'字符串),当主线程收到'hello'会给子线程回复'hi',由于想直观的看到运行结果我加了sleep。但是实际的运行结果并没有如我想象的一样,代码如下:
void main(){
var rece = new ReceivePort();
Isolate.spawn((sendPort) {
var sonRece = new ReceivePort();
sendPort.send(sonRece.sendPort);
sonRece.listen((message) {
print("子线程收到信息:$message");
});
for (var i = 0; i < 10; i++) {
sleep(Duration(seconds: 2));
if (i == 6) {
sendPort.send("hello");
continue;
}
sendPort.send(i);
}
}, rece.sendPort);
//主线程监听
rece.listen((message) {
var sendPort;
if (message is SendPort) {
sendPort = message;
}
print("主线程收到信息:$message");
if (message == "hello") {
sendPort?.send("hi");
}
});
}
运行结果:
代码运行结果为什么没有打印'子线程收到信息:hi'呢?
把SendPort 放外面:
建议用异步代替 sleep,这样更不会堵: