4

我有一个Observable去数据库和查询一些信息。我不希望我的 observable 执行时间超过 5 秒,因此我使用:

myObservable.timeout(5,second);

然后我也想处理错误通知,因此我使用:

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

myObservable然后我想知道用于进行数据库查询的代码会发生什么。它也会被终止,还是会继续运行?(这发生在 Java native 上Future.get(timeLimit)

4

1 回答 1

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会将您的错误转换为事件,然后完成您的流(并将其标记为已完成),然后您的源 observable 将被取消订阅。

这个取消订阅部分将运行一些代码,根据你的源 observable 的编写方式,这些代码可能会停止你的请求,或者什么都不做,或者释放一些资源。

在您的情况下,它可能会调用cancel您的方法Future(根据Subscriptions类)

于 2016-04-12T15:43:45.320 回答