Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpCrEr 166 of 299 menu
◀ ▶

Ошибки в Kotlin

Исключение внутри корутины ведет себя как обычный сбой: оно всплывает к точке, где корутину запустили. Если runBlocking стоит в main, блок try вокруг вызова может перехватить ошибку до выхода из программы.

Намеренный сбой внутри launch прерывает весь runBlocking, если его не обработать внутри:

import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking fun main() { try { runBlocking { launch { error("boom") } } } catch (ex: IllegalStateException) { println(ex.message) } println("alive") }

Сообщение исключения попадает в catch, затем печатается "alive". Поток main не обрывается на необработанном исключении.

Тот же прием работает, когда сбой бросают прямо в теле runBlocking без фонового запуска:

import kotlinx.coroutines.runBlocking fun main() { try { runBlocking { val n = 0 val bad = 5 / n println(bad) } } catch (_: ArithmeticException) { println("fix input") } }

Внутри runBlocking вызовите стандартную функцию ошибки с текстом "fail". Оберните запуск в try снаружи и напечатайте "handled" в обработчике.

Фоновая корутина бросает IllegalArgumentException с сообщением "bad id". Перехватите его вокруг runBlocking и выведите сообщение исключения.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить