我有一个使用spawnFunction创建的隔离,并提供了一个错误处理程序,并将try包装在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');
}
});
}
答案 0 :(得分:2)
目前(截至2013年4月)无法处理此错误。 (AFAIK)
两个改进可以解决问题:1)设置全局异常处理程序的方法,或2)异步try / catch。
如果代码在隔离区中运行,则已经可以使用全局异常处理程序。可以将异常处理程序作为参数传递给spawnFunction
。我们将改进隔离区的API,但目前这是捕获未捕获异常的唯一方法。
我们正在考虑异步尝试/捕获,但到目前为止它只不过是想法。
编辑:还有一个问题是,这是否应该抛出,缓冲或只是丢弃收到的值。