Sobes.tech
Junior — Middle

Ce abordări și metode sunt utilizate pentru gestionarea erorilor în corutinele Kotlin?

sobes.tech AI

Răspuns de la AI

În Kotlin, există mai multe abordări pentru gestionarea erorilor în corutine:

  1. try-catch în interiorul corutinei — cel mai simplu mod de a gestiona excepțiile. Poți înveli codul din launch sau async într-un bloc try-catch.
launch {
    try {
        // cod care poate arunca o excepție
    } catch (e: Exception) {
        // gestionarea erorii
    }
}
  1. CoroutineExceptionHandler — un handler special care poate fi transmis în contextul corutinei. Acesta prinde excepțiile necontrolate din corutinele lansate cu launch.
val handler = CoroutineExceptionHandler { _, exception ->
    println("Capturat $exception")
}

GlobalScope.launch(handler) {
    throw RuntimeException("Eroare")
}
  1. Gestionarea erorilor în async/await — la utilizarea lui async, excepțiile nu sunt aruncate imediat, ci la apelarea lui await(). De aceea, trebuie învelit await() în try-catch.
val deferred = async {
    // cod
    throw Exception("Eroare")
}

try {
    deferred.await()
} catch (e: Exception) {
    // gestionare
}
  1. SupervisorJob și SupervisorScope — permit izolarea erorilor din corutinele copil, astfel încât o eroare să nu anuleze întregul scope părinte.

Așadar, alegerea metodei depinde de context și de tipul corutinei (launch sau async).