CompletableFuture VS @Async - PullRequest
       35

CompletableFuture VS @Async

0 голосов
/ 24 апреля 2020

Я плохо владею английским sh.

Я использую асинхронные методы.

Опция 1

public CompletableFuture<Integer> getDiscountPriceAsync(Integer price) {
        return CompletableFuture.supplyAsync(() -> {
            log.info("supplyAsync");
            return (int)(price * 0.9);
        }, threadPoolTaskExecutor);
    }

Опция 2

@Async
public CompletableFuture<Integer> getDiscountPriceAsync(Integer price) {
        return CompletableFuture.supplyAsync(() -> {
            log.info("supplyAsync");
            return (int)(price * 0.9);
        }, threadPoolTaskExecutor);
    }

Интересно, в чем разница между использованием @ Asyn c и его неиспользованием.

Я думаю, что в первом Option1 предусмотрено достаточно асинхронных методов.
Однако правильно ли использовать его как Option2?

1 Ответ

1 голос
/ 24 апреля 2020

Вариант 2 выполняется дважды асинхронно.

Если вы аннотировали метод с @ Asyn c, он будет выполняться Spring асинхронно. Таким образом, вам не нужно использовать ThreadPoolExecutor самостоятельно.

Вместо этого вы можете написать:

@Async
public CompletableFuture<Integer> getDiscountPriceAsync(Integer price) {
    log.info("supplyAsync");

    return new AsyncResult<Integer>((int)(price * 0.9)); 
}

Подробнее об Asyn c с Spring здесь: https://www.baeldung.com/spring-async

...