Hogyan különbözik a hibakezelés a coroutine-okon belül a try/catch szerkezet használatától a CoroutineExceptionHandler használatához képest?
sobes.tech MI
Válasz az MI-től
Kotlinban a hibakezelés a korutinokban két módon történhet: try/catch segítségével a korutinon belül, és CoroutineExceptionHandler segítségével.
-
try/catcha korutinon belül lehetővé teszi, hogy helyben elfogd azokat a kivételeket, amelyek a korutin kódblokkjában fordulnak elő. Ez akkor hasznos, ha közvetlenül ott akarod kezelni a hibát, ahol az keletkezhet. -
CoroutineExceptionHandleregy globális kivételkezelő a hibával végződő, és helyben nem elfogott korutinok számára. Csaklaunch-szal indított korutinokkal működik (amelyekJob-ot adnak vissza), nemasync-szal (amelyekDeferred-et adnak vissza), mivel azasync-nak explicitawaithívásra van szüksége az eredmény megszerzéséhez és a kivételek kezeléséhez.
Példa:
val handler = CoroutineExceptionHandler { _, exception ->
println("Kivétel elfogva a CoroutineExceptionHandler-ben: $exception")
}
GlobalScope.launch(handler) {
try {
// Kód, ami kivételt dobhat
throw RuntimeException("Hiba a korutinban")
} catch (e: Exception) {
println("Helyben elfogva: $e")
}
}
Ha a kivétel helyben, try/catch-ben van elfogva, akkor a CoroutineExceptionHandler nem fog működni. Ha a kivétel nem kerül helyben kezelésre, akkor a CoroutineExceptionHandler-hez kerül. Így a try/catch helyi kezelést biztosít, míg a CoroutineExceptionHandler globális, és a nem kezelt kivételek naplózására vagy más műveletekre szolgál.