RxJava と Java 8 の CompletableFuture クラスを試していますが、タイムアウト条件を処理する方法がよくわかりません。
import static net.javacrumbs.futureconverter.java8rx.FutureConverter.toObservable;
// ...
Observable<String> doSomethingSlowly() {
CompletableFuture<PaymentResult> task = CompletableFuture.supplyAsync(() -> {
// this call may be very slow - if it takes too long,
// we want to time out and cancel it.
return processor.slowExternalCall();
});
return toObservable(task);
}
// ...
doSomethingSlowly()
.single()
.timeout(3, TimeUnit.SECONDS, Observable.just("timeout"));
これは基本的に機能します (3 秒のタイムアウトに達すると、「タイムアウト」が発行されます)。ただし、ラップした将来のタスクをキャンセルしたいObservable
場合もあります-RxJava中心のアプローチでそれは可能ですか?
1つのオプションは、を使用して自分でタイムアウトを処理することであることは知っていますがtask.get(3, TimeUnit.SECONDS)
、RxJavaですべてのタスク処理を行うことが可能かどうか疑問に思います。