Как выполнять различные действия, когда поток занимает различное количество времени для выполнения? - PullRequest
0 голосов
/ 26 мая 2018

Существует служба отдыха, которая выполняет некоторые вычисления и печатает результаты в файле Excel, который возвращается в качестве ответа. По мере увеличения данных мы хотим реализовать следующее поведение.Если файл готов в течение 3 секунд, верните Excel, отправьте текстовое сообщение. И файл позже будет отправлен пользователю по почте.

Есть предложения, как мы можем реализовать эту функцию в Java ??

1 Ответ

0 голосов
/ 26 мая 2018

Используйте Future с таймаутом:

public String getExel() {
     CompletableFuture<String> getter = CompletableFuture.supplyAsync(() -> "result");
     try {
        return getter().get(3, TimeUnits.SECONDS);
     } catch(TimeoutException ex) {
       // invoke email sending
       getter.thenAcceptAsync(result -> sendEmail(result));

       // I will send you email later
       return "XXx to indicate you will send him later";
     }
}

public void sendEmail(String resultFromGetExel) {

}
...