CompletableFuture runAsync vs supplyAsync, когда выбрать один из других?

Каково обоснование выбора одного над другим? Единственное отличие, которое я могу вывести после прочтения документации, состоит в том, что runAsync принимает Runnable в качестве входного параметра, а supplyAsync принимает поставщика в качестве входного параметра.

В этой публикации описывается мотивация использования поставщика с методом supplyAsync, но он по-прежнему не отвечает, когда отдавать предпочтение одному из других.

Всего 1 ответ


runAsync принимает Runnable в качестве входного параметра и возвращает CompletableFuture<Void> , что означает, что он не возвращает никакого результата.

CompletableFuture<Void> run = CompletableFuture.runAsync(()-> System.out.println("hello"));

Но suppyAsync принимает в качестве аргумента поставщика и возвращает CompletableFuture<U> со значением результата, что означает, что он не принимает никаких входных параметров, но возвращает результат в качестве вывода.

CompletableFuture<String> supply = CompletableFuture.supplyAsync(() -> {
        System.out.println("Hello");
        return "result";
    });

 System.out.println(supply.get());  //result

Вывод: так что если вы хотите, чтобы результат был возвращен, то выберите supplyAsync или, если вы просто хотите запустить асинхронное действие, затем выберите runAsync .


Есть идеи?

10000