> Какие проблемы возникают при оборачивании launch в try-catch в Kotlin Coroutines (Kotlin, Android)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: Aston

Стек: Kotlin, Android

> Пример ответа

При оборачивании launch в try-catch в Kotlin Coroutines возникает несколько ключевых проблем:

  1. Не перехватывает исключения внутри корутины: launch возвращает Job, а не результат. Исключения, возникшие внутри блока launch, не пробрасываются в окружающий try-catch, так как они выполняются асинхронно в другом контексте. Например:

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

  3. Необходимость явной обработки: Для перехвата исключений внутри launch нужно использовать try-catch внутри самого блока корутины или установить CoroutineExceptionHandler в контексте. Пример правильного подхода:

    launch {
        try {
            // код, который может выбросить исключение
        } catch (e: Exception) {
            // обработка
        }
    }
  4. Потеря контекста: Если launch обёрнут в try-catch на уровне вызывающего кода, это создаёт ложное ощущение безопасности, так как исключения из корутины всё равно останутся необработанными.

Рекомендация: Используйте try-catch внутри launch или применяйте CoroutineExceptionHandler для глобальной обработки исключений в корутинах.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью