有没有办法了解Job <void>是否成功完成?</void>

时间:2011-12-25 17:04:54

标签: java playframework

在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();
}

2 个答案:

答案 0 :(得分:0)

我认为await期望调用inside的方法返回Promise,这是一个Future(结果将在执行完成时捕获)。它是异步的,因此向外抛出异常将没有多大意义。

如果你只对结果做一个get(),它会给你任何例外(它会抛出)。见code

答案 1 :(得分:0)

我只是使用Job<Boolean>代替并在成功时返回true