Junior — Middle
Come gestire le eccezioni durante l'avvio delle coroutine usando try/catch, posizionato al di fuori della funzione launch?
sobes.tech AI
Risposta dell'AI
In Kotlin, le eccezioni che si verificano all'interno delle coroutine non possono essere catturate con un try/catch normale se si trovano fuori dalla funzione launch, perché launch avvia la coroutine in modo asincrono e restituisce immediatamente un oggetto Job, e le eccezioni si verificano già in un altro contesto.
Per gestire le eccezioni, bisogna usare gestori all'interno della coroutine o meccanismi speciali:
- Usare
CoroutineExceptionHandlerdurante la creazione del contesto della coroutine. - Gestire le eccezioni all'interno della stessa coroutine con try/catch.
- Per le coroutine avviate con
async, è possibile catturare l'eccezione chiamandoawait().
Esempio con CoroutineExceptionHandler:
val handler = CoroutineExceptionHandler { _, exception ->
println("Eccezione catturata: ${exception.message}")
}
val job = CoroutineScope(Dispatchers.Default + handler).launch {
throw RuntimeException("Errore nella coroutine")
}
job.join()
In questo modo, try/catch fuori da launch non funzionerà, bisogna catturarlo all'interno della coroutine o usare CoroutineExceptionHandler.