Sobes.tech
Junior — Middle

Millised lähenemised ja meetodid kasutatakse Kotlin korutinates vigade töötlemiseks?

sobes.tech AI

Vastus AI-lt

Kotlinis on mitu lähenemisviisi vigade käsitlemiseks korutinates:

  1. try-catch korutinas sees — kõige lihtsam viis erandite käsitlemiseks. Võite koodi launch või async plokki panna try-catch-i.
launch {
    try {
        // kood, mis võib visata erandi
    } catch (e: Exception) {
        // vea käsitlemine
    }
}
  1. CoroutineExceptionHandler — spetsiaalne käsitleja, mida saab korutina kontekstis edasi anda. Ta püüab kinni käsitlemata erandid launch-iga käivitatud korutinates.
val handler = CoroutineExceptionHandler { _, exception ->
    println("Tabatud $exception")
}

GlobalScope.launch(handler) {
    throw RuntimeException("Viga")
}
  1. Vigade käsitlemine async/await-iga — kasutades async, erandid ei visata kohe, vaid await() kutsumisel. Seetõttu tuleb await()-i panna try-catch-i.
val deferred = async {
    // kood
    throw Exception("Viga")
}

try {
    deferred.await()
} catch (e: Exception) {
    // käsitlemine
}
  1. SupervisorJob ja SupervisorScope — võimaldavad isoleerida laste korutinade vigu, nii et üks viga ei tühista kogu vanema scope.

Seega, meetodi valik sõltub kontekstist ja korutina tüübist (launch või async).