假设我有一个计时器,它会在一秒间隔后发出一个项目。
我想订阅它并执行它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)
}
有没有办法从代码的第一部分获取最后一个发出的值? 我想使用这个解决方案来测量某个任务的执行时间。
答案 0 :(得分:0)
您可以使用doOnNext()
设置类字段的值,或在路径中插入BehaviorSubject
来获取最后一个值。
但是,我不认为您的代码实际上是在测量执行任务的CPU时间。相反,它正在捕获可能不相关的线程上的处理的起点和终点。所以,你能得到的最好的是挂钟时间。
更好的方法是(用Java编写,因为我不知道Kotlin):
long start = System.nanoTime();
performTaskOnThisThread();
long end = System.nanoTime();
long durationInNanoSeconds = end - start;