1

来自下面显示的简单隔离代码的预期“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");
}

寻找线索。有什么想法吗?

4

1 回答 1

1

在第一个示例中,sendPort 没有连接到主隔离,它只存在于生成的隔离中。

此代码在两个隔离中执行

var mainReceivePort = new ReceivePort();

并且每个隔离物都有一个不同的mainReceivePort实例,它们没有以任何方式连接。

在第二个例子中,主隔离的sendPort连接mainReceivePort对象被传递给生成的隔离对象,传递给它的消息将被mainReceivePort主隔离对象的连接对象接收。

于 2017-08-16T15:06:46.870 回答