我有Observable
进入数据库并查询某些信息。我不希望我的可观察执行时间超过5秒,因此我使用:
myObservable.timeout(5,second);
然后我也想处理错误通知,因此我使用:
myObservable.timeout(5,second).onError(return empty result);
然后我想知道myObservable
中用于进行数据库查询的代码会发生什么。它会被终止,还是会继续运行? (恰好是Java native Future.get(timeLimit)
)
答案 0 :(得分:2)
让我们举个例子:
Observable.interval(1, TimeUnit.SECONDS)
.timeout(10, TimeUnit.MICROSECONDS)
.onErrorReturn(e -> -1L)
.subscribe(System.out::println,
Throwable::printStackTrace,
() -> System.err.println("completed"));
timeout
运算符将发出错误。但先例运营商不会成为这个错误的通知者。
操作员onErrorReturn
会将您的错误转换为事件,然后完成您的信息流(并将其标记为已完成),然后您的源可观察信息将取消订阅。
这个取消订阅部分将运行一些代码,这些代码可能会停止您的请求,或者什么都不做,或者释放一些资源,这取决于您的源可观察源的编写方式。
在您的情况下,它可能会在cancel
上调用Future
方法(根据Subscriptions类)