dart - 在调用之前检测ReceivePort是否具有处理程序

标签 dart dart-isolates

我已经使用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');
    }
  });
}

最佳答案

目前(截至2013年4月),没有任何方法可以处理此错误。 (据我所知)

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

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

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

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

关于dart - 在调用之前检测ReceivePort是否具有处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15992648/

相关文章:

dart - Dart 中的全局变量

dart - Dart编辑器更新失败:无法关闭Analysis Server

flutter - 当 Hive 数据在 FireBaseMessage 的 onBackgroundMessage 处理程序中更新时,如何更新 UI 小部件?

Dartium 显示空白页

android - flutter 中的“A RenderFlex overflowed by 373 pixels on the bottom”问题[不重复]

json - 参数类型 'x' 无法分配给参数类型 'y'

firebase - flutter Isolate 中的共享偏好

dart - flutter (dart) 是否能够在单独的 isolate 中发出 api 请求?

调试隔离

dart - 如何终止隔离以及隔离终止时如何获得通知