【问题标题】:RxJava - very long delayRxJava - 很长的延迟
【发布时间】:2017-11-16 23:13:05
【问题描述】:

我需要使用 RxJava 的延迟操作符。谁能解释它是如何工作的?线程在延迟期间是否休眠?延迟有多准确?在最坏的情况下,我需要几乎在 1 天(延迟 24 小时)后发出项目。

【问题讨论】:

  • 哇,我不认为 RxJava 是解决这个问题的正确工具。
  • RxJava 使用标准 Java ScheduledThreadPoolExecutor 类进行延迟操作,因此准确性取决于您运行的 JDK 和平台。
  • 欢迎来到 Stack Overflow!我们不是来为你做你的工作的。请使用tour 并阅读help pages 以了解如何编写一个好的、可回答的问题。您需要通过发布代码来展示您迄今为止为解决问题所做的工作。
  • 这个问题有几种可能的解决方案。你可以使用一个 cron-job 库或者你可以使用 RxJava 来完成这个任务。我会说这取决于你的逻辑。使用 RxJava 方法,您需要阻止主线程退出。但是,如果作业每 24 小时触发一次,那么测试起来会很容易。您可以为此使用 TestScheduler。
  • 语法更正

标签: java rx-java system.reactive


【解决方案1】:

使用延迟运算符,我们将管道的创建从惰性延迟到急切。 但是一旦开始发射延迟操作符不会影响发射的项目

@Test
public void delayCreation() {
    long start = System.currentTimeMillis();
    Subscription subscription = Observable.just("hello reactive world")
            .delay(200, TimeUnit.MICROSECONDS)
            .subscribe(n -> System.out.println("time:" + (System.currentTimeMillis() - start)));
    new TestSubscriber((Observer) subscription).awaitTerminalEvent(1000, TimeUnit.MILLISECONDS);
}

您可以在此处查看更多延迟示例https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/utils/ObservableDelay.java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 2012-06-23
    • 2018-09-03
    • 2017-07-06
    相关资源
    最近更新 更多