如何从可观察到的最新值中获取

时间:2017-11-09 23:12:41

标签: kotlin rx-java rx-java2

假设我有一个计时器,它会在一秒间隔后发出一个项目。

我想订阅它并执行它10秒钟。 10秒后,我取消订阅,然后我希望能够从代码的其他部分访问其最后的emmited值。 以下是示例代码:

@Test
fun testMeasuretime(){

    val emitter = Observable.interval(1, TimeUnit.SECONDS)
            .doOnNext{t: Long? -> Log.v("emitter", t.toString())}

    val disposable = emitter.subscribe()
    Thread.sleep(10000)

    disposable.dispose()

    Thread.sleep(5000)

//get the last emited value

    Thread.sleep(5000)

}

有没有办法从代码的第一部分获取最后一个发出的值? 我想使用这个解决方案来测量某个任务的执行时间。

1 个答案:

答案 0 :(得分:0)

您可以使用doOnNext()设置类字段的值,或在路径中插入BehaviorSubject来获取最后一个值。

但是,我不认为您的代码实际上是在测量执行任务的CPU时间。相反,它正在捕获可能不相关的线程上的处理的起点和终点。所以,你能得到的最好的是挂钟时间。

更好的方法是(用Java编写,因为我不知道Kotlin):

long start = System.nanoTime();
performTaskOnThisThread();
long end = System.nanoTime();
long durationInNanoSeconds = end - start;