我有这个 Android Kotlin 代码,其中包含一个 Completables 列表,这些 Completables 合并成一个更大的mergeDelayError()
,有一个超时。达到超时时,我得到java.util.concurrent.TimeoutException: The source did not signal an event for 250 milliseconds and has been terminated.
我如何知道列表中的哪一个小可完成项在没有发出任何信号/发出任何信号的情况下达到了超时(实际列表有两个以上的 BTW)。我理想的解决方案是将此类异常替换为:Exception: The following operations reached a timeout: Check initial settings, Check server
,或者至少每个超时可完成打印输出的特定日志行。
我不知道该怎么做。我的第一个猜测是简单地为每个可完成添加一个“didEmit”标志,并在大可完成上达到超时时逐个检查它们,但这对我来说似乎是一个糟糕的解决方案。
任何想法表示赞赏。谢谢你。
val smallCompletable1 = controller
.checkInitialSettings()
.doOnError {
logError(it)
}
.ignoreElement()
val smallCompletable2 = controller
.checkServerStatus()
.doOnError {
logError(it)
}
.ignoreElement()
val myCompletables: List<Completable> = listOf(
smallCompletable1,
smallCompletable2
)
val bigDisposable = Completable
.mergeDelayError(myCompletables)
.timeout(250, TimeUnit.MILLISECONDS)
.subscribe(this::handleAllSucceeded, this::handleError)
composition.add(bigDisposable)