Поэтому я определил два метода:
Код: Выделить всё
@Async("executor")
public CompletableFuture[*]> getDashboardItemsFuture1()
@Async("executor")
public CompletableFuture getDashboardItemsFuture2()
CompletableFuture следующим образом:
Код: Выделить всё
@Async("executor")
public CompletableFuture getDashboardItemsFuture1() {
return CompletableFuture.completedFuture(executeRestCall())
}
- Ожидается, пока все вызовы REST завершают свое выполнение.
Если при выполнении одного из вызовов REST выдается исключение (например, TimeoutException), результат другого вызова REST все равно возвращается из нашего микросервиса.
Код: Выделить всё
var dashboardItemsFuture1 = getDashboardItemsFuture1();
var dashboardItemsFuture2 = getDashboardItemsFuture1()
var combinedFuture = CompletableFuture.allOf(dashboardItemsFuture1, dashboardItemsFuture2);
try {
combinedFuture.get(); // Wait for both futures to complete
} catch (Exception exc) {
// Handle exceptions
log.error(exc);
}
Optional.ofNullable(dashboardItemsFuture1.get())
.ifPresent(dashboardItems::addAll);
Optional.ofNullable(dashboardItemsFuture2.get())
.ifPresent(dashboardItems::addAll);
Код: Выделить всё
var dashboardItemsFuture1 = getDashboardItemsFuture1();
Источник: https://stackoverflow.com/questions/780 ... blefutures
Мобильная версия