【发布时间】:2015-06-25 07:01:37
【问题描述】:
我正在试验 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"));
这基本上是可行的(如果达到三秒的超时,则发布“超时”)。但是,我还想取消包含在 Observable 中的未来任务 - 以 RxJava 为中心的方法是否可能?
我知道一种选择是自己处理超时,使用task.get(3, TimeUnit.SECONDS),但我想知道是否可以在 RxJava 中完成所有任务处理。
【问题讨论】:
-
你能展示一下
toObservable方法是如何实现的吗?
标签: java future rx-java completable-future