Junior — Middle
Hoe ga je om met uitzonderingen bij het starten van coroutines met try/catch, geplaatst buiten de launch-functie?
sobes.tech AI
Antwoord van AI
In Kotlin kunnen uitzonderingen die binnenin coroutines optreden niet worden opgevangen met een gewone try/catch als ze buiten de launch-functie worden geplaatst, omdat launch de coroutine asynchroon start en onmiddellijk een Job-object retourneert, en de uitzonderingen al in een andere context plaatsvinden.
Om uitzonderingen af te handelen, moet je gebruik maken van handlers binnen de coroutine of speciale mechanismen:
- Gebruik
CoroutineExceptionHandlerbij het maken van de coroutine-context. - Behandel uitzonderingen binnen de coroutine met try/catch.
- Voor coroutines gestart via
async, kun je de uitzondering opvangen doorawait()aan te roepen.
Voorbeeld met CoroutineExceptionHandler:
val handler = CoroutineExceptionHandler { _, exception ->
println("Opgevangen uitzondering: ${exception.message}")
}
val job = CoroutineScope(Dispatchers.Default + handler).launch {
throw RuntimeException("Fout in coroutine")
}
job.join()
Dus, try/catch buiten launch werkt niet; je moet het binnen de coroutine opvangen of CoroutineExceptionHandler gebruiken.