Sobes.tech
Junior — Middle

Cum se gestionează excepțiile la pornirea corutinelor folosind try/catch, plasat în afara funcției launch?

sobes.tech AI

Răspuns de la AI

În Kotlin, excepțiile care apar în interiorul corutinelor nu pot fi capturate cu un try/catch obișnuit dacă sunt plasate în afara funcției launch, deoarece launch pornește corutina asincron și returnează imediat un obiect Job, iar excepțiile apar deja într-un alt context.

Pentru a gestiona excepțiile, trebuie să folosiți gestionare interne corutinei sau mecanisme speciale:

  • Utilizați CoroutineExceptionHandler la crearea contextului corutinei.
  • Tratați excepțiile în interiorul corutinei cu try/catch.
  • Pentru corutinele lansate prin async, puteți captura excepția apelând await().

Exemplu cu CoroutineExceptionHandler:

val handler = CoroutineExceptionHandler { _, exception ->
    println("Excepție capturată: ${exception.message}")
}

val job = CoroutineScope(Dispatchers.Default + handler).launch {
    throw RuntimeException("Eroare în corutină")
}

job.join()

Astfel, try/catch-ul din afara launch nu va funcționa, trebuie capturat în interiorul corutinei sau folosit CoroutineExceptionHandler.