1

我使用 spawnFunction 创建了一个隔离,并提供了一个错误处理程序并将发送包装在 try/catch 中。

如果我尝试发送到 replyTo 并且它没有注册接收,那么它(正确地)抛出一个方法未找到异常,但我不知道如何捕获和处理它。

如果您取消注释 recPort 行,它应该一切正常。

echoIsolate() {
  port.receive((message, replyTo) {
    replyTo.send(message, port.toSendPort());
  });
}

bool errorHandler(IsolateUnhandledException ex) {
  print('Got error');
  return true;
}

run_tests() {
  test('bad rec', () {
    try {
    var recPort = new ReceivePort();
    //recPort.receive((message, replyTo) => print('Got echo: ${message}'));

    var isolatePort = spawnFunction(echoIsolate, errorHandler);

    isolatePort.send('message', recPort.toSendPort());
    } catch(ex) {
      print('Got exception');
    }
  });
}
4

1 回答 1

2

目前(截至 2013 年 4 月)没有办法处理此错误。(AFAIK)

两个改进可以解决这个问题:1)设置全局异常处理程序的方法,或 2)异步 try/catch。

如果代码在隔离中运行,则全局异常处理程序已经成为可能。可以将异常处理程序作为参数传递给spawnFunction. 我们将改进隔离的 API,但目前这是捕获未捕获异常的唯一方法。

我们正在考虑异步 try/catch,但到目前为止还只是想法。

编辑:还有一个问题是这是否应该抛出、缓冲或只是丢弃接收到的值。

于 2013-04-13T23:04:34.713 回答