Выполнение текущего потока во время выполнения фонового процесса — моно реактивное программирование

#java #spring-boot #java-8 #reactive-programming #spring-webflux

#java #весенняя загрузка #java-8 #реактивное программирование #spring-webflux

Вопрос:

Я пытаюсь запустить основной метод, в котором основной метод вызывает другой метод (Bmethod), который мне нужно запустить в фоновом режиме, но мне нужен немедленный ответ основного метода, не дожидаясь ответа Bmethod. Мне нужно использовать реактивный код Java (webflux).

 public static void main(String[] args) {
       String abc=  Mono.just(Bmethod()).block();
        System.out.println("AAAAAAA");
    }


    public static String Bmethod() {
        System.out.println("BBBBBBBB");
        return "AACALL";

    }
 

Я хочу напечатать AAAAAAA, а затем только BBBBBBBB, не дожидаясь ответа Bmethod. Как добиться этого с помощью реактивной моно Java.

Комментарии:

1. Я думаю, вам нужно более подробно объяснить, что вы на самом деле хотите сделать. Потому что это можно решить многими, многими различными способами. Например, что abc используется для, и вам не разрешено вызывать block реактивное non-blocking приложение.

Ответ №1:

Вам нужно будет переключить свой вызов на Bmethod поставщика и переместить block вызов в конец.

 Mono<String> abcMono = Mono.fromSupplier(() -> Bmethod());
System.out.println("AAAAAAA");
String abc = abcMono.block();
 

Обратите внимание, что:

  1. вызов block определяет момент, когда вам действительно нужно значение из вашего Mono , поэтому оно не должно быть в начале.
  2. по сравнению с решением поставщика, ваша идея just заставляет java вычислять аргумент, прежде чем передавать его функции, что делает перенос бесполезным