Ответ
Использование try/catch снаружи launch в корутинах не поймает исключения, выброшенные внутри корутины, так как launch запускает асинхронную операцию. Исключения внутри корутины нужно обрабатывать внутри launch или использовать CoroutineExceptionHandler.
Пример:
try {
CoroutineScope(Dispatchers.IO).launch {
throw RuntimeException("Ошибка внутри корутины")
}
} catch (e: Exception) {
// Сюда не попадём, исключение не перехватится
}
Для перехвата исключений используйте try/catch внутри launch или async либо настройте CoroutineExceptionHandler.