2017-11-27 3 views
0

私は方法.fromAction()によって作成Completableにおける方法.timeout()とエラー、発見:括弧内タイムアウト法はCompletable.fromAction(で実行壊すことができない)

Completable.fromAction(() -> { 
     System.out.println("start time: " + timeString()); 
     Thread.sleep(10_000); 
    }) 
      .timeout(3, TimeUnit.SECONDS) 
      .onErrorComplete() 
      .blockingAwait(); 

    System.out.println("after time: " + timeString()); 

コードは、タイムアウトが3に設定し、10秒を実行します秒。ただし、実行は10秒後に終了します。これは、プログラムの出力です:

start time: 14:55 
after time: 15:05 

Process finished with exit code 0 

質問:なぜ3秒後に休憩をしませ実行し、どのようにそれを修正するには?

+0

'fromAction'の後に' subscribeOn(Schedulers.io()) 'を試してください。 – akarnokd

+0

@akarnokd、ハハ、うまくいきます! :) しかし、なぜ? –

+0

'timeout'はメインスレッドを中断することはできませんが、' Scheduler'で実行中のタスクを中断することができます。 – akarnokd

答えて

1

fromActionの後にsubscribeOn(Schedulers.io())を試してください。 timeoutはメインスレッドを中断できませんが、Schedulerで実行中のタスクを中断することがあります。

関連する問題