Например, здесь я бы предположил, что уже слишком поздно перехватывать исключения, поскольку оно уже распространилось, поэтому происходит сбой
Код: Выделить всё
lifecycleScope.launch {
val job = async {
throw Exception()
}
try {
job.await()
} catch (e: Exception) {
println("caught")
}
}
Код: Выделить всё
val scope = CoroutineScope(Job())
scope.async {
val job = async {
throw Exception()
}
try {
job.await()
} catch (e: Exception) {
println("caught")
}
}
Код: Выделить всё
val job = lifecycleScope.async {
launch {
throw Exception()
}
}
runBlocking {
try {
job.await()
} catch (e: Exception) {
println("caught")
}
}
Код: Выделить всё
runBlocking {
async {
val job = async {
throw Exception()
}
launch {
try {
job.await()
} catch (e: Exception) {
println("caught")
}
}
}
}
Код: Выделить всё
lifecycleScope.async {
val job = async {
throw Exception()
}
try {
job.await()
} catch (e: Exception) {
println("caught")
}
}
Код: Выделить всё
val scope = CoroutineScope(Job())
scope.async {
val job = async {
throw Exception()
}
try {
job.await()
} catch (e: Exception) {
println("caught")
}
}
Мое другое предположение заключалось в том, что, возможно, это зависит от потока, поскольку иногда исключение просто регистрируется, поэтому я предположил, что, возможно, он аварийно завершает работу только при Основной поток, но не на IO/Default, но не имело значения, какой диспетчер я использовал, результаты были одинаковыми.
Я пробовал много других вариантов, но не смог понять принцип
Так как же это работает? Чего мне не хватает?
Подробнее здесь: https://stackoverflow.com/questions/798 ... ally-works
Мобильная версия