Junior — Middle
Какви подходи и методи се използват за обработка на грешки в Kotlin корутините?
sobes.tech AI
Отговор от AI
В Kotlin има няколко подхода за обработка на грешки в корутините:
- try-catch вътре в корутината — най-простият начин за обработка на изключения. Можете да обвиете кода в
launchилиasyncв блокtry-catch.
launch {
try {
// код, който може да предизвика изключение
} catch (e: Exception) {
// обработка на грешката
}
}
- CoroutineExceptionHandler — специален обработчик, който може да бъде предаден в контекста на корутината. Той улавя неуправляеми изключения в корутините, стартирани чрез
launch.
val handler = CoroutineExceptionHandler { _, exception ->
println("Засечено $exception")
}
GlobalScope.launch(handler) {
throw RuntimeException("Грешка")
}
- Обработка на грешки в async/await — при използване на
async, изключенията не се хвърлят веднага, а при извикване наawait(). Затова трябва да обвиетеawait()вtry-catch.
val deferred = async {
// код
throw Exception("Грешка")
}
try {
deferred.await()
} catch (e: Exception) {
// обработка
}
- SupervisorJob и SupervisorScope — позволяват да се изолират грешките на дъщерните корутини, така че една грешка да не отменя целия родителски scope.
Изборът на метод зависи от контекста и типа на корутината (launch или async).