RxJava 2:Observable.create()等待使用Thread.sleep()完成异步代码

时间:2017-12-15 20:39:11

标签: java multithreading asynchronous rx-java rx-java2

我使用Observable.create(...)包装一些异步代码。异步代码需要“活动”五秒钟,然后才能停止。这就是我目前停止它的方式:

Observable.<MyObject>create(emitter -> {

    // Some async code

    emitter.setDisposable(Disposables.fromRunnable(() -> {
        // Stop the above async code
    }));

    // Wait for 5 seconds until the async code above has had enough time to finish its task.
    Thread.sleep(5000);

    if (!emitter.isDisposed()) {
        // Stop the above async code
        emitter.setDisposable(null);
    }
})...

我不确定这是否是最佳方式,因为使用了Thread.sleep(5000)。有没有更好的方法来使用一些RxJava代码?

1 个答案:

答案 0 :(得分:1)

存在take的定时重载,允许您在源指定的时间过去之前从源获取项目:

Observable.<MyObject>create(emitter -> {

    // Some async code

    emitter.setDisposable(Disposables.fromRunnable(() -> {
        // Stop the above async code
    }));
})
.take(5, TimeUnit.SECONDS);

您仍需在Disposable设置create