Метод applyToEitherAsyn c создает ситуацию, когда результат одной из двух функций (A и B) может вызвать запуск третьей функции (C).
Если функция B вызывает функцию A для завершения в процессе выполнения гарантированно, что входные данные для функции C будут результатом функции A, поскольку A должен завершиться раньше, чем B?
Тот же сценарий, написанный в коде:
CompletableFuture<String> fa = new CompletableFuture<>();
CompletableFuture<String> fb =
CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
fa.complete("fa result");
return "fb result";
});
CompletableFuture<String> fc = fa.applyToEitherAsync(fb, result -> result);
try {
System.out.println(fc.get());
} catch (Exception e) {
throw new RuntimeException(e);
}
На практике это выводит "результат fa", чего и следовало ожидать, но действительно ли он гарантирован?