用Java 8 CompletableFuture替换Futures.successfulAsList吗?
作者:互联网
我正在寻找用Java 8的CompletableFuture代码替换Guava的Futures.successfulAsList()
的规范代码.
我认为CompletableFuture.allOf()
似乎是Futures.allAsList()
的替代品,但是我看不到任何类似于successAsList()的东西.
解决方法:
实际上,CompletableFuture.allOf(…)比allAsList()更接近successAsList().
实际上,allOf()仅在所有给定的期货都完成后才完成,无论是带有值还是异常.然后,您可以检查每个将来以检查其完成情况(例如,在随后的thenAccept()/ thenApply()中).
allAsList()在CompletableFuture中没有非常接近的等效项,因为一旦任何输入Future失败,它都应该失败.但是,您可以结合使用allOf()来实现它,并将每个输入的future与一个exception()链接起来,这将使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;
}));
标签:completable-future,java-8,asynchronous,guava,java 来源: https://codeday.me/bug/20191026/1933764.html