Java 当使用Observable.timeout时,超时后会发生什么?

Java 当使用Observable.timeout时,超时后会发生什么?,java,rx-java,reactivex,Java,Rx Java,Reactivex,我有一个可观察的,可以进入数据库查询一些信息。我不希望我的可观察执行时间超过5秒,因此我使用: myObservable.timeout(5,second); myObservable.timeout(5,second).onError(return empty result); 然后我还要处理错误通知,因此我使用: myObservable.timeout(5,second); myObservable.timeout(5,second).onError(return empty res

我有一个
可观察的
,可以进入数据库查询一些信息。我不希望我的可观察执行时间超过5秒,因此我使用:

myObservable.timeout(5,second);
myObservable.timeout(5,second).onError(return empty result);
然后我还要处理错误通知,因此我使用:

myObservable.timeout(5,second);
myObservable.timeout(5,second).onError(return empty result);

然后我想知道
myObservable
中用于数据库查询的代码会发生什么变化。它是否也将被终止,或将继续运行?(Java native
Future.get(timeLimit)

让我们举个例子:

Observable.interval(1, TimeUnit.SECONDS)
            .timeout(10, TimeUnit.MICROSECONDS)
            .onErrorReturn(e -> -1L)
            .subscribe(System.out::println,
                       Throwable::printStackTrace,
                       () -> System.err.println("completed"));
超时
运算符将发出错误。但之前的操作员不会通知此错误

操作员
onErrorReturn
会将您的错误转换为事件,然后完成您的流(并将其标记为完成),然后您的源可观测数据将被取消订阅

这个取消订阅部分将运行一些代码,这些代码可能会停止您的请求,或者什么也不做,或者释放一些资源,具体取决于您的源代码observable是如何编写的


在您的情况下,它可能会在您的
未来
上调用
取消
方法(根据课程)

您自己可能很容易回答这个问题。设置一个只休眠10秒的Observable,然后尝试上面的代码,看看会发生什么。