Kā atšķiras kļūdu apstrāde korutīnās, izmantojot konstrukciju try/catch, no CoroutineExceptionHandler izmantošanas?
sobes.tech AI
Atbilde no AI
Kotlinā kļūdu apstrāde korutīnās var tikt veikta divos veidos: ar try/catch korutīnas iekšienē un ar CoroutineExceptionHandler.
-
try/catchkorutīnas iekšienē ļauj lokāli noķert izņēmumus, kas rodas korutīnas koda blokā. Tas ir noderīgi, ja vēlaties tieši tur, kur var rasties kļūda, to apstrādāt. -
CoroutineExceptionHandlerir globāls izņēmumu pārvaldnieks korutīnām, kas beidzas ar kļūdu un nav noķertas vietēji. Tas darbojas tikai arlaunchuzsāktām korutīnām (kas atgriežJob), nevis arasync(kas atgriežDeferred), joasyncprasa skaidruawaitizsaukumu rezultāta iegūšanai un kļūdu apstrādei.
Piemērs:
val handler = CoroutineExceptionHandler { _, exception ->
println("Korutīnas `CoroutineExceptionHandler` noķerta kļūda: $exception")
}
GlobalScope.launch(handler) {
try {
// Kods, kas var izraisīt izņēmumu
throw RuntimeException("Kļūda korutīnā")
} catch (e: Exception) {
println("Vietējā noķeršana: $e")
}
}
Ja kļūda ir noķerta try/catch, CoroutineExceptionHandler netiks aktivizēts. Ja kļūda nav noķerta vietēji, tā tiks nosūtīta uz CoroutineExceptionHandler. Šādā veidā, try/catch nodrošina vietējo apstrādi, bet CoroutineExceptionHandler ir globāls un paredzēts neapstrādātu kļūdu reģistrēšanai vai citām darbībām.