2011-12-25 10 views
3

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

回答

0

我只是用Job<Boolean>代替,並且成功返回true

0

我想等待期望內部調用的方法返回Promise,這是一個Future(結果將在執行完成時捕獲)。它的異步,所以向外拋出一個異常沒有多大意義。

如果你只是對結果做一個get(),它會給你任何例外(它會拋出)。請參閱code

+0

查看我更新的問題 - 我嘗試使用'get()',但這仍然不會引發異常。 – ripper234 2011-12-25 18:02:21

+0

另外,我相信如果我把所有調用都放在'await()'上,那麼這個工作就會在Web服務器線程池中執行,這不是一個好主意。 – ripper234 2011-12-26 08:04:31

+0

我認爲你說得對,等待沒問題。只是,當我看看Promise的代碼時,它傳達給我,如果有的話,應該拋出一個異常,這很奇怪,它不適合你的情況。可能你想嘗試玩Google組? – aishwarya 2011-12-26 09:40:40

相關問題