隔离代码没有按预期工作

时间:2017-08-16 14:58:21

标签: dart dart-isolates

预期" 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");
}

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

1 个答案:

答案 0 :(得分:1)

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

此代码在两个隔离区中执行

var mainReceivePort = new ReceivePort();

并且每个隔离区都会获得一个不以任何方式连接的mainReceivePort实例。

在第二个示例中,连接到主隔离的sendPort的{​​{1}}被传递给生成的隔离,传递给它的消息将由主隔离的连接mainReceivePort接收