Kotlin 是否可能捕获不同范围的异常?
这种设置可能吗Kotlin 是否可能捕获不同范围的异常?,kotlin,coroutine,kotlin-coroutines,Kotlin,Coroutine,Kotlin Coroutines,这种设置可能吗 scopeA.launch { try { scopeB.launch { throw SomeException() } } catch (e: SomeException) { // Want to catch here } } 您似乎希望实现相互矛盾的事情:启动并发协同程序和暂停当前工作直到它完成,捕获可能的异常。你必须决定你真正想要什么: 如果需要并发性,请在子协同路由中处理
scopeA.launch {
try {
scopeB.launch {
throw SomeException()
}
} catch (e: SomeException) {
// Want to catch here
}
}
您似乎希望实现相互矛盾的事情:启动并发协同程序和暂停当前工作直到它完成,捕获可能的异常。你必须决定你真正想要什么:
scopeA.launch {
launch(dispatcherB) {
try {
throw SomeException()
} catch (e: SomeException) {
// handle
}
}
}
与上下文(dispatcherB)
:
scopeA.launch {
try {
withContext(dispatcherB) {
throw SomeException()
}
} catch (e: SomeException) {
// handle
}
}
频道
或流
您似乎希望实现相互矛盾的事情:启动并发协同程序和暂停当前工作直到它完成,捕获可能的异常。你必须决定你真正想要什么:
scopeA.launch {
launch(dispatcherB) {
try {
throw SomeException()
} catch (e: SomeException) {
// handle
}
}
}
与上下文(dispatcherB)
:
scopeA.launch {
try {
withContext(dispatcherB) {
throw SomeException()
}
} catch (e: SomeException) {
// handle
}
}
频道
或流
我认为这个答案可以帮助你们,我认为这个答案可以帮助你们,在不同的情况下,不同的作用域是有意义的吗?例如,scopeA在活动的生命周期内处于活动状态,scopeB在已建立的蓝牙连接期间处于活动状态。scopeB执行蓝牙io操作,直到断开连接(scope已取消)。scopeA和scopeB都应该使用主调度器,但有不同的生命周期。如果您在问题中包含用例,那就太好了。我试图将问题简化为给出两个作用域的要点。不过,我还是在根据你的回答重新思考我的设计。我有一个解决你问题的办法:建立一个
频道,这样你就可以向对方发出异常信号。它还可以与流
一起工作。在不同的情况下,不同的作用域是否有意义?例如,scopeA在活动的生命周期内处于活动状态,scopeB在已建立的蓝牙连接期间处于活动状态。scopeB执行蓝牙io操作,直到断开连接(scope已取消)。scopeA和scopeB都应该使用主调度器,但有不同的生命周期。如果您在问题中包含用例,那就太好了。我试图将问题简化为给出两个作用域的要点。不过,我还是在根据你的回答重新思考我的设计。我有一个解决你问题的办法:建立一个频道,这样你就可以向对方发出异常信号。它还可以与流
一起使用。