1
我已经使用spawnFunction创建了一个使用提供的错误处理程序创建的隔离区,并在try/catch中封装了send。检测ReceivePort是否在调用之前有处理程序
如果我尝试发送给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');
}
});
}
我会完全满意: - 单向和双向端口之间的区别,所以我可以在回复之前检查客户端(或者如果我认为重要的是要回复,请拒绝请求...) - 一个构造函数,它允许可选地回复receivePort并且默认为noop – Perry
哦......或者noop可以,直到被覆盖,抛出'未处理的回复在ReceivePort'或者其他类似的东西?这样它就可以被捕获(我认为)并且更清楚发生了什么...... – Perry
最后,是否存在一个现有的缺陷,我可以观察/将这些想法变为更好的永久性? – Perry