#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();
Обратите внимание, что:
- вызов
block
определяет момент, когда вам действительно нужно значение из вашегоMono
, поэтому оно не должно быть в начале. - по сравнению с решением поставщика, ваша идея
just
заставляет java вычислять аргумент, прежде чем передавать его функции, что делает перенос бесполезным