Sobes.tech
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 CoroutineExceptionHandler bij het maken van de coroutine-context.
  • Behandel uitzonderingen binnen de coroutine met try/catch.
  • Voor coroutines gestart via async, kun je de uitzondering opvangen door await() 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.