在Play中,似乎如果在Job<T>
内抛出异常,则异常不会向外传播。
如果我理解正确,为了知道内部代码是否抛出异常,我必须恢复使用布尔返回值(a known anti pattern)?或者我错过了什么?
这是一个代码示例,它不会抛出任何内容,而是呈现todo页面 - 我想知道如何知道内部作业从外部控制器方法引发异常:
public static void testException() throws ExecutionException, InterruptedException {
F.Promise<Void> result = new Job<Void>() {
@Override
public void doJob() throws Exception {
Thread.sleep(1000);
throw new RuntimeException("Foo");
}
}.now();
await(result);
result.get();
todo();
}
答案 0 :(得分:0)
我认为await期望调用inside的方法返回Promise,这是一个Future(结果将在执行完成时捕获)。它是异步的,因此向外抛出异常将没有多大意义。
如果你只对结果做一个get(),它会给你任何例外(它会抛出)。见code
答案 1 :(得分:0)
我只是使用Job<Boolean>
代替并在成功时返回true
。