Какие знаешь способы обработки ошибок в корутинах

«Какие знаешь способы обработки ошибок в корутинах» — вопрос из категории Coroutines и Flow, который задают на 26% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В корутинах ошибки обрабатываются через try-catch блоки или механизмы CoroutineExceptionHandler и SupervisorJob.

  1. try-catch – стандартный способ:
viewModelScope.launch {
    try {
        repository.fetchData()
    } catch (e: Exception) {
        // Обработка ошибки
    }
}
  1. CoroutineExceptionHandler – глобальный обработчик:
val handler = CoroutineExceptionHandler { _, exception ->
    Log.e("CoroutineError", "Caught $exception")
}
viewModelScope.launch(handler) { /* ... */ }
  1. SupervisorJob – изолирует сбои в дочерних корутинах:
val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
scope.launch { /* Если упадет, не затронет другие корутины */ }

Также можно использовать async с await() и обрабатывать исключения при вызове.