【问题标题】:Recent documentation about Dart Isolates最近有关飞镖隔离的文档
【发布时间】:2014-01-25 03:24:11
【问题描述】:

我最近开始使用 Dart (www.dartlang.org) 并且到目前为止非常喜欢它。 一个非常有前途的功能是隔离,但我不知道如何开始。

到目前为止,我发现的文档来自 2013 年 10 月的重大变更 (BREAKING CHANGE: dart:isolate)。这封“重大变更”电子邮件中的信息非常复杂,看起来新的 api 比旧的更复杂。

我有一些问题:

  • dart:isolate api 稳定吗?
  • 是否有最新的文档?
  • 是否有任何工作示例?

感谢您的帮助, 亨德里克·扬

【问题讨论】:

    标签: dart web-worker dart-isolates


    【解决方案1】:

    我试过这个例子,它可以工作https://gist.github.com/olostan/7883315

    import "dart:isolate";
    
    void main() {
      print("Starting");
      var sPort = new ReceivePort();
      SendPort rPort;
      sPort.listen((msg) {
        if (msg is SendPort) {
          print("Host got port. sending back");
          rPort = msg;
          rPort.send("Hello!");
        }
        else print("Host got $msg");
        rPort.send(null);
        sPort.close();
      });
      Isolate.spawn(test,sPort.sendPort);
    }
    void test(sender) {
      var rPort = new ReceivePort();
      sender.send(rPort.sendPort);
      rPort.listen((msg){
        print("Worker got $msg");
        if (msg!=null)
          sender.send("I am worker");
        else rPort.close();
      });
    }
    

    隔离似乎还没有使用太多,所以可能仍然存在一些错误。
    我记得读过的最新问题是调试在隔离中运行的代码。我不知道这是否已经解决了。
    这还取决于您是要在服务器上还是在浏览器中使用隔离。
    AFAIK 它在 VM 中更稳定。

    【讨论】:

    • 您好,君特,谢谢。我从未在服务器上使用过 Dart。在 Dartium 上,我得到“启用 dom 的隔离不支持 spawnFunction”。你知道这是否会在未来起作用吗? (我知道我可以使用 spawnUri,如下所示:japhr.blogspot.nl/2013/11/new-fangled-dart-isolates.html,但这看起来更麻烦)。
    • 哦,我也打算添加这个链接,但显然忘记了。很高兴你还是找到了它。我在 Chris 的帖子中看到 spawnFunction() is not supported` 被抛出,即使实际使用了 spawn()。我也没有关于这个架构的更多信息。我建议在 BREAKING CHANGE 帖子中引用的 Dart 组上发布一个问题。
    • @hendrik - 更多示例参见is-there-any-example-for-darts-spawnuri-in-library-dartisolateIsolate.spawnUri 的额外开销似乎是 1) 将您的代码放在单独的库中 2) 处理 Future ,它会告诉您隔离是否生成正常,从那里开始它都是相同的。
    • 如果我在Isolate.spawn 行之后添加sleep(new Duration(seconds: 5));,执行将在生成前暂停。为什么?那么如何创建循环呢?
    • spawn 是异步的,这意味着它是在当前“执行线程”执行完所有同步代码之后执行的,但sleep 会暂停当前的“线程” ' 因此,在睡眠完成之前,所有进一步的执行都会被阻止。您可以使用new Future.delayed(new Duration(seconds: 5), () { your delayed code here;}); 延迟isolate.spawn() 之后的代码执行。在生产代码中应不惜一切代价避免sleep
    猜你喜欢
    • 2012-05-05
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    相关资源
    最近更新 更多