这个问题实际上与使用Java 8CompletableFuture替换Futures.successfulAsList十分相似。
尽管问题并不完全相同,但相同的答案(来自我自己)应该可以满足您的需求。
您可以结合使用来实现此功能,allOf()
并使用将每个输入的future与链接起来exceptionally()
,这样会使allOf()
立即返回的future 失败:
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;
}));