2017-04-10 639 views

回答

2

CompletableFuture.allOf(…)實際上比allAsList()更接近successfulAsList()

確實,allOf()只有在所有給定期貨完成後纔會完成,無論是價值還是例外。然後您可以檢查每個未來以檢查其完成情況(例如,在以下thenAccept()/thenApply())。

allAsList()CompletableFuture中沒有近似的等值,因爲只要輸入期貨失敗就會失敗。但是,你可以用allOf()組合實現它,並用exceptionally(),這將使由allOf()返回立即失敗以後鏈的每個輸入的未來:

CompletableFuture<String> a = …, b = …, c = …; 
CompletableFuture<Void> allWithFailFast = CompletableFuture.allOf(a, b, c); 
Stream.of(a, b, c) 
    .forEach(f -> f.exceptionally(e -> { 
     allWithFailFast.completeExceptionally(e); 
     return null; 
    })); 
+0

感謝德羅巴,這是有幫助的。 – Miket