我的服务器中有pusub订阅者,它运行并行任务,需要等待所有任务完成.
目前,当一个子元素抛出异常时,它会完全损坏整个订阅者,整个管道也会中断.
然后,我try 为"有问题"的子元素的CancellationExcept添加try-catch. 然而,然后我注意到,尽管订阅者do继续处理,但它并不会让订阅者等待所有任务.
try {
listOf(
async {
// A - fails
delay(timeMillis(seconds = 0.5))
throw CancellationException()
},
async {
delay(timeMillis(seconds = 10))
println("B finished")
},
async {
delay(timeMillis(seconds = 5))
println("C finished")
}
).awaitAll()
} catch (e: CancellationException) {
println("cancellation!")
} catch (e: Throwable) {
println("throwable!")
}
println("All finished -----------------")
我看到打印的是:
cancellation!
All finished -----------------
C finished
B finished
但我需要能够等到B和C完成,even if A失败/引发异常.
换句话说,我想要这种行为:
cancellation! (A fails)
C finished
B finished
All finished -----------------
如何才能实现这一目标?