【发布时间】:2019-10-01 17:20:52
【问题描述】:
我正在尝试从我的 Observable (BehaviorSubject.create()) 中获取一个值
当我运行 locationObservable.subscribe {} 时,我会在几秒钟内收到结果。然而与
try {
it.locationObservable
.timeout(10, TimeUnit.SECONDS)
.blockingFirst()
} catch (e: Exception) {
}
无论有没有超时,都不会发生任何事情。我只是收到“java.util.concurrent.TimeoutException:源在 10 秒内没有发出事件信号并已终止”。我尝试过blockingFirst()、blockingLast() 和blockingForEach()。我是否以某种方式阻塞了可以为我提供价值的线程?
编辑:将其从主线程移出后,它开始工作。谢谢大家的意见。
【问题讨论】:
-
您为什么一开始就尝试进行阻塞调用?一般来说,你应该避免使用 RxJava 阻塞。更多信息:stackoverflow.com/a/52662255/4409409
-
您提供的示例中引用的 blockingGet() 适用于 Single,我正在使用 BehaviorSubject。我知道阻塞可能会破坏反应编程的目的,但在我的情况下,我需要在执行代码的其他部分之前从 Android 检索位置快照,并且我不希望每次需要快照时都有监听器.我知道阻塞线程的风险。
标签: java android rx-java rx-java2