2016-04-12 17 views
2

Observable私はデータベースにアクセスし、いくつかの情報を問い合わせています。私は、このように、私が使用して、5秒よりも私の観察可能な実行が長くしたくない:Observable.timeoutを使用してタイムアウトした後はどうなりますか?

myObservable.timeout(5,second); 

それから私はまた、このように私が使用してエラー通知を処理したい:

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

その後、私は何のためだろうmyObservableのコードにデータベースクエリを実行するために使用されます。それも終了されるか、それとも実行されますか? (これはJavaのネイティブFuture.get(timeLimit)に起こる)

+1

Subscriptionsクラスに応じて)あなたのFuturecancelメソッドを呼び出すことができますあなたは、おそらく非常に簡単にこの質問を自分で答えることができます。 Observableを設定して10秒間だけスリープ状態にし、上記のコードを試してみてください。 – dcsohl

答えて

0

のは例を見てみましょう:

Observable.interval(1, TimeUnit.SECONDS) 
      .timeout(10, TimeUnit.MICROSECONDS) 
      .onErrorReturn(e -> -1L) 
      .subscribe(System.out::println, 
         Throwable::printStackTrace, 
         () -> System.err.println("completed")); 

timeoutオペレータはエラーを発します。しかし、先例の演算子はこのエラーを通知することはありません。

オペレータonErrorReturnはエラーをイベントに変換してからストリームを完成させ(終了したものとしてマークします)、ソースオブザーバブルは登録解除されます。

このアンサブスクリプションパートは、ソースオブザーバブルの記述方法に応じて、リクエストを停止するか、何もしない、またはリソースを解放するコードを実行します。あなたのケースでは

、それは

関連する問題