在Play中,似乎如果在Job<T>
內引發異常,則該異常不會向外傳播。有沒有辦法瞭解工作<Void>是否成功完成?
如果我理解正確,爲了知道內部代碼是否引發異常,我必須恢復使用布爾返回值(a known anti pattern)?或者我錯過了什麼?
這裏是不扔東西代碼示例,而是呈現待辦事項頁面 - 我想知道怎麼知道的內部工作從外部控制器方法拋出一個異常:
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();
}
查看我更新的問題 - 我嘗試使用'get()',但這仍然不會引發異常。 – ripper234 2011-12-25 18:02:21
另外,我相信如果我把所有調用都放在'await()'上,那麼這個工作就會在Web服務器線程池中執行,這不是一個好主意。 – ripper234 2011-12-26 08:04:31
我認爲你說得對,等待沒問題。只是,當我看看Promise的代碼時,它傳達給我,如果有的話,應該拋出一個異常,這很奇怪,它不適合你的情況。可能你想嘗試玩Google組? – aishwarya 2011-12-26 09:40:40