私は自分の仕事を持っているし、そのためのフォールバック: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);
この時点で、タスクが50ms以内に終了しなかった場合、リターン出力はfallbackTaskによって処理されることが予想されます。これは軽量です。
java.util.concurrent.TimeoutException: Timeout waiting for task.
私は他の成功したタスクからすべての結果を失う原因:私は予定通り
しかし、私は次の例外を持っていません。この場合、フォールバックは私にとってはうまくいきませんでした。それとも私はその概念を誤解しましたか?
WithFallbackラッピングに関する明確な説明をいただきありがとうございます:) – Xitrum