Примерно так:
Код: Выделить всё
public Mono test() {
Mono monoA = Mono.fromCallable(() -> {
try {
log.info("A Started");
Thread.sleep(2000);
log.info("A Ended");
return Math.random() > 0.5 ? "A" : "a";
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}).subscribeOn(Schedulers.boundedElastic());
Mono monoB = Mono.fromCallable(() -> {
try {
log.info("B Started");
Thread.sleep(8000);
log.info("B Ended");
return "B";
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}).subscribeOn(Schedulers.boundedElastic());
long startTime = System.currentTimeMillis();
return monoA.flatMap(a -> {
Mono result;
if(a.equals("A")) {
result = Mono.just(a);
} else {
result = monoB;
}
return result;
}).map(response -> {
long totalTime = System.currentTimeMillis() - startTime;
return "Returning '" + response + "' in: " + totalTime + " ms";
});
}
A началось
A закончилось
Возврат 'A ' через: 2032 мс
Если monoA = "a" печатает:
A началось
A закончилось
Б запущен
Б Завершено
Возврат 'B' через: 10007 мс
если я использую:
Mono.zip(monoA, monoB)
Лучшим и худшим случаем всегда является 8000 мс
Я хочу, чтобы
если monoA = ответ «A» в 2000 мс
если моноА = ответ «a» через 8000 мс
Возможно или даже правильно ли то, что я хочу сделать?
Подробнее здесь: https://stackoverflow.com/questions/793 ... not-wait-f
Мобильная версия