Ho riscontrato uno strano comportamento di Java 8 CompletableFuture.exceptionally method. Se eseguo questo codice, funziona benissimo e stampe java.lang.RuntimeException
Comportamento sorprendente di Java 8 CompletableFuture eccezionalmente metodo
CompletableFuture<String> future = new CompletableFuture<>();
future.completeExceptionally(new RuntimeException());
future.exceptionally(e -> {
System.out.println(e.getClass());
return null;
});
Ma se aggiungo un altro passo nel futuro di elaborazione, come il tipo di eccezione thenApply
modifiche java.util.concurrent.CompletionException
con l'eccezione originale avvolto all'interno.
CompletableFuture<String> future = new CompletableFuture<>();
future.completeExceptionally(new RuntimeException());
future.thenApply(v-> v).exceptionally(e -> {
System.out.println(e);
return null;
});
C'è qualche motivo per cui questo dovrebbe accadere? A mio parere, è abbastanza sorprendente.