aba*_*haw 3 java multithreading java-8 completable-future
当所有给定的期货完成时,Java 8CompletableFuture.allOf(CompletableFuture<?>...cfs)
将返回一个CompletableFuture
完成的,或者CompletionException
如果其中一个期货完成并出现异常则抛出一个。
如果我的一个期货异常完成,会CompletableFuture.allOf
等待剩余的期货完成后再抛出CompletionException
还是会取消剩余的期货?
如果它等待所有期货完成,有什么办法让它在任何期货抛出异常时立即返回并取消剩余的期货?
如果我的一个期货异常完成,将
CompletableFuture.allOf
等待剩余的期货完成,然后再抛出CompletionException
是的,它仍然会等待所有期货完成。
您可以使用此辅助方法创建一个CompletableFuture
一旦任何期货这样做就会异常完成的方法。
public static CompletableFuture allOfTerminateOnFailure(CompletableFuture<?>... futures) {
CompletableFuture<?> failure = new CompletableFuture();
for (CompletableFuture<?> f: futures) {
f.exceptionally(ex -> {
failure.completeExceptionally(ex);
return null;
});
}
return CompletableFuture.anyOf(failure, CompletableFuture.allOf(futures));
}
Run Code Online (Sandbox Code Playgroud)
如果您还想在其中一个异常完成时取消所有其他期货,您可以在从该方法返回之前这样做:
failure.exceptionally(ex -> {
Arrays.stream(futures).forEach(f -> f.cancel(true));
return null;
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1553 次 |
最近记录: |