Я столкнулся со странной ситуацией. Я возился с CompletableFuture
, и при запуске следующего кода у меня были неожиданные результаты:
public static void main(String[] args) {
CompletableFuture<CompletableFuture<CompletableFuture<CompletableFuture<CompletableFuture<CompletableFuture<Object>>>>>> completableFutureCompletableFuture = CompletableFuture.supplyAsync(() -> {
System.out.println("first");
return CompletableFuture.supplyAsync(() -> {
System.out.println("second");
return CompletableFuture.supplyAsync(() -> {
System.out.println("third");
return CompletableFuture.supplyAsync(() -> {
System.out.println("fourth");
return CompletableFuture.supplyAsync(() -> {
System.out.println("fifth");
return CompletableFuture.completedFuture(null);
});
});
});
});
});
completableFutureCompletableFuture.get();
}
Исключение не выдается (даже при использовании exceptionally
), и я вижу, что вывод консоли
first
second
third // appears sometimes
Теперь очевидно, что этот код не имеет реальной производственной ценности, но это представление случая, когда ваш код имеет неизвестное количество вложений, где каждое или некоторые из них создают CompleteableFutures
, которые не будут выполняться.
Буду очень признателен за любое объяснение (и пример того, как исправить)
thenCompose[Async]()
. - person Didier L   schedule 21.02.2017