Как перехватывать Exception в Coroutine. Часть 1
Поймать Exception в Java и Kotlin просто — ошибка, выброшенная через throw, поднимается вверх по стеку функций, пока не попадет в try-catch блок или в Thread.UncaughtExceptionHandler
Но как только появляются корутины...
Это одна из самых сложных тем по двум причинам:
• зависимость пути проброса Exception от множества условий
• минимальное количество примеров (в документации и интернете в целом), покрывающих неочевидные кейсы
На логику обработки ошибок в корутинах влияет:
• создаем корутину верхнего уровня или вложенную
• используем ли мы Job или SupervisorJob
• используем ли мы билдер launch или async
• устанавливаем ли мы CoroutineExceptionHandler (и куда устанавливаем)
• еще и особая CancellationException обрабатывается по другим правилам
причем здесь не бинарная логика, а комбинация этих условий определяет, как и где мы сможем перехватить Exception
....
в следующих частях разберемся, зачем столько сложностей, и создадим единую логику отслеживания ошибок
Post #72
1.88K