Junior — Middle
Kako obraditi izuzetke prilikom pokretanja korutina pomoću try/catch, smeštenog izvan funkcije launch?
sobes.tech АИ
Одговор од АИ
U Kotlinu, izuzeci koji se javljaju unutar korutina ne mogu se uhvatiti običnim try/catch ako su smešteni izvan funkcije launch, jer launch pokreće korutinu asinhrono i odmah vraća objekat Job, a izuzeci se već javljaju u drugom kontekstu.
Da biste obradili izuzetke, morate koristiti rukovaoce unutar korutine ili specijalne mehanizme:
- Koristite
CoroutineExceptionHandlerprilikom kreiranja konteksta korutine. - Obradite izuzetke unutar same korutine pomoću try/catch.
- Za korutine pokrenute putem
async, možete uhvatiti izuzetak pozivomawait().
Primer sa CoroutineExceptionHandler:
val handler = CoroutineExceptionHandler { _, exception ->
println("Uhvaćen izuzetak: ${exception.message}")
}
val job = CoroutineScope(Dispatchers.Default + handler).launch {
throw RuntimeException("Greška u korutini")
}
job.join()
Na ovaj način, try/catch van launch neće raditi, potrebno ga je uhvatiti unutar korutine ili koristiti CoroutineExceptionHandler.