с поставщиком

я есть сомнения по поводу этого кода:

@Async
public CompletableFuture<String> doFoo() {
    CompletableFuture<String> fooFuture = new CompletableFuture<>();  

    try {
        String fooResult = longOp();
        fooFuture.complete(fooResult);
    } catch (Exception e) {
        fooFuture.completeExceptionally(e);
    }

    return fooFuture;
}

Вопрос в следующем: действительно ли doFoo возвращает fooFuture только после того, как longOp завершил (правильно или исключительно) и, следовательно, возвращает уже завершенные фьючерсы или Spring делает какую-то магию и возвращается перед выполнением тела? Если код блокирует longOp (), как бы вы выразили, что вычисления передаются исполнителю?

Возможно это? Любым другим путем?

@Async
public CompletableFuture<String> doFoo() {

    CompletableFuture<String> completableFuture = new CompletableFuture<>();
    CompletableFuture.runAsync(() -> {
        try {
            String fooResult = longOp();
            completableFuture.complete(fooResult);
        } catch (Exception e) {
            completableFuture.completeExceptionally(e);
        }
    });
    return completableFuture;
}

Ответы на вопрос(1)

Ваш ответ на вопрос