1

这是我使用命令行 dart 运行的一个非常简单的代码,以证明我的观点:

import 'dart:isolate';

void isolateMain() {
  throw new Exception("ouch");
}

bool handleException(IsolateUnhandledException e) {
  print("EXCEPTION in isolate: " + e.toString());
  return true;
}

void main() {
  SendPort sendPort = spawnFunction(isolateMain, handleException);
  sendPort.call("Hello").then((e) {
    print("Main received " + e);
  });
}

和输出:

Exception: ouch
#0      isolateMain (file:///Users/salomon/Workspaces/eclipse/Deployer_Server/bin/deployer_server.dart:7:3)

因此,事实证明 unhandledExceptionCallback 永远不会被调用,而隔离确实会引发异常。

作为记录 :

> dart --version
Dart VM version: 0.5.20.4_r24275 (Fri Jun 21 05:02:50 2013) on "macos_x64"

那么,有人可以解释一下我做错了什么吗?

谢谢 ;)

4

1 回答 1

0

不知道你是不是做错了,可能是bug。但似乎在隔离的主函数中抛出的异常没有被处理程序捕获。如果你像这样改变它:

import 'dart:isolate';

void isolateMain() {
  port.receive((whatever, mahPort) {
    throw new Exception("$whatever");
  });
}

bool handleException(IsolateUnhandledException e) {
  print("EXCEPTION in isolate: ${e.toString()}");
  return true;
}

void main() {
  SendPort sendPort = spawnFunction(isolateMain, handleException);
  sendPort.call("Hello").then((e) {
    print("Main received $e");
  });
}

...然后handleException()将被调用。

于 2013-06-25T08:56:36.433 回答