Похоже, вы будете sh для противоречивых вещей: оба запускают параллельную сопрограмму и приостанавливает текущую работу до ее завершения, улавливая возможные исключения. Вы должны решить, что вы на самом деле хотите:
Если вы хотите параллелизма, обработайте исключение в дочерней сопрограмме:
scopeA.launch {
launch(dispatcherB) {
try {
throw SomeException()
} catch (e: SomeException) {
// handle
}
}
}
Если вы не хотите этого, не launch
сопрограмму, а вместо этого используйте withContext(dispatcherB)
:
scopeA.launch {
try {
withContext(dispatcherB) {
throw SomeException()
}
} catch (e: SomeException) {
// handle
}
}
Если вы буквально хотите, чтобы две сопрограммы с разделенными жизненными циклами общались, вы должен ввести также разъединенный механизм связи. Например, вы можете установить Channel<SomeException>
или Flow<SomeException>
.