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
CoroutineExceptionHandlerla crearea contextului corutinei. - Tratați excepțiile în interiorul corutinei cu try/catch.
- Pentru corutinele lansate prin
async, puteți captura excepția apelândawait().
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.