Ako sa líši spracovanie chýb v rámci korutín pomocou konštrukcie try/catch od použitia CoroutineExceptionHandler?
sobes.tech AI
Odpoveď od AI
V Kotlinu môže byť spracovanie chýb v korutinách vykonané dvoma spôsobmi: pomocou try/catch vo vnútri samotnej korutiny a pomocou CoroutineExceptionHandler.
-
try/catchvo vnútri korutiny umožňuje lokálne zachytiť výnimky, ktoré vzniknú v bloku kódu korutiny. Je to užitočné, keď chcete spracovať chybu priamo tam, kde môže nastať. -
CoroutineExceptionHandlerje globálny správca výnimiek pre korutiny, ktoré skončia chybou a neboli zachytené lokálne. Funguje iba s korutinami spustenými pomocoulaunch(ktoré vracajúJob), nie sasync(ktoré vracajúDeferred), pretožeasyncvyžaduje explicitné volanieawaitna získanie výsledku a spracovanie výnimiek.
Príklad:
val handler = CoroutineExceptionHandler { _, exception ->
println("Zachytená výnimka v CoroutineExceptionHandler: $exception")
}
GlobalScope.launch(handler) {
try {
// Kód, ktorý môže vyvolať výnimku
throw RuntimeException("Chyba v korutine")
} catch (e: Exception) {
println("Lokálne zachytené: $e")
}
}
Ak je výnimka zachytená v try/catch, CoroutineExceptionHandler sa neaktivuje. Ak výnimka nie je lokálne spracovaná, bude odoslaná do CoroutineExceptionHandler. Týmto spôsobom try/catch zabezpečuje lokálne spracovanie, zatiaľ čo CoroutineExceptionHandler je globálny a slúži na logovanie alebo iné akcie pri nezachytených výnimkách.