Имеет ли applyToEitherAsyn c CompletableFuture гарантии упорядочения, если задача asyn c завершает другое будущее? - PullRequest
0 голосов
/ 10 апреля 2020

Метод 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", чего и следовало ожидать, но действительно ли он гарантирован?

...