У меня есть задание и резервное для него:Как использовать FallbackFuture для обработки TimeoutException?
ListenableFuture<T> listenableAsyncTask = executorService.submit(asyncTaskCallable);
ListenableFuture<T> listenableFallbackTask = executorService.submit(fallBackTaskCallable);
Из них, я формирую неисправность толерантного ListenableFuture:
ListenableFuture<T> failTolerantListenableFuture = Futures.withFallback(listenableAsyncTask, new FutureFallback<T>() {
@Override
public ListenableFuture<T> create(Throwable t) throws Exception {
return listenableFallbackTask;
}
});
И у меня есть список неудача толерантных фьючерсов:
List<ListenableFuture<T>> listenableFutures = ...;
Пришло время получить результат за определенное время:
result = Futures.allAsList(listenableFutures).get(50,TimeUnit.MILLISECONDS);
На данный момент я ожидаю, что если задача не завершится в течение 50 мс, выходной результат будет обработан осенью, которая является легкой.
Но не так как я строганый, я получил следующее исключение:
java.util.concurrent.TimeoutException: Timeout waiting for task.
Что заставляет меня потерять все результаты от других задач успеха. Кажется, что резерв не работал в этом случае для меня. Или я неправильно понял эту концепцию?
Большое спасибо за четкое объяснение на упаковке WithFallback :) – Xitrum