How to implement CompletableFuture.allOf() that completes exceptionally once any of the futures fail?

后端 未结 2 1222
暖寄归人
暖寄归人 2020-12-11 12:57

I want to implement a hybrid of CompletableFuture.allOf() and CompletableFuture.anyOf() where the returned future completes successfully as soon as

2条回答
  •  生来不讨喜
    2020-12-11 13:28

    This question is actually very similar to Replace Futures.successfulAsList with Java 8 CompletableFuture?

    Although the question is not exactly the same, the same answer (from myself) should satisfy your needs.

    You can implement this with a combination of allOf() and chaining each input future with an exceptionally() that would make the future returned by allOf() immediately fail:

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

提交回复
热议问题