2017-04-10 3 views

Antwort

2

CompletableFuture.allOf(…) ist eigentlich näher an successfulAsList() als allAsList().

In der Tat, allOf() wird nur abgeschlossen, nachdem alle angegebenen Futures abgeschlossen haben, sei es mit einem Wert oder eine Ausnahme. Sie können dann jede Zukunft prüfen, um zu überprüfen, wie sie abgeschlossen wurde (z. B. in einer folgenden thenAccept()/thenApply()).

allAsList() hat keine enge Entsprechung in CompletableFuture, weil es fehlschlagen sollte, sobald einer der Input-Futures fehlschlägt. Allerdings Sie es mit einer Kombination aus allOf() und Verkettungs jede Eingabe Zukunft mit einem exceptionally() implementieren könnte, die die Zukunft von allOf() sofort scheitern zurück machen würde:

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

Dank Didier, das ist hilfreich. – Miket

Verwandte Themen