Sobes.tech
Junior — Middle

Ποιες προσεγγίσεις και μέθοδοι χρησιμοποιούνται για την επεξεργασία σφαλμάτων στις coroutine του Kotlin;

sobes.tech AI

Απάντηση από AI

Στην Kotlin, υπάρχουν διάφορες προσεγγίσεις για τη διαχείριση σφαλμάτων στις coroutine:

  1. try-catch μέσα στη coroutine — ο πιο απλός τρόπος διαχείρισης εξαιρέσεων. Μπορείτε να τυλίξετε τον κώδικα μέσα σε launch ή async σε ένα μπλοκ try-catch.
launch {
    try {
        // κώδικας που μπορεί να προκαλέσει εξαίρεση
    } catch (e: Exception) {
        // διαχείριση σφάλματος
    }
}
  1. CoroutineExceptionHandler — ένας ειδικός χειριστής που μπορεί να περαστεί στο πλαίσιο της coroutine. Πιάνει μη διαχειριζόμενες εξαιρέσεις σε coroutines που ξεκινούν με launch.
val handler = CoroutineExceptionHandler { _, exception ->
    println("Πιάστηκε $exception")
}

GlobalScope.launch(handler) {
    throw RuntimeException("Σφάλμα")
}
  1. Διαχείριση σφαλμάτων σε async/await — κατά τη χρήση του async, οι εξαιρέσεις δεν ρίχνονται αμέσως, αλλά κατά την κλήση του await(). Επομένως, πρέπει να τυλίξετε το await() σε try-catch.
val deferred = async {
    // κώδικας
    throw Exception("Σφάλμα")
}

try {
    deferred.await()
} catch (e: Exception) {
    // διαχείριση
}
  1. SupervisorJob και SupervisorScope — επιτρέπουν την απομόνωση σφαλμάτων των παιδικών coroutine, ώστε ένα σφάλμα να μην ακυρώνει ολόκληρο το scope του γονέα.

Επομένως, η επιλογή της μεθόδου εξαρτάται από το πλαίσιο και τον τύπο της coroutine (launch ή async).