Sobes.tech
Junior — Middle

Πώς ανιχνεύει το coroutineScope ότι οι κορουτίνες του έχουν ακυρωθεί;

sobes.tech AI

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

coroutineScope στις coroutine του Kotlin ανιχνεύει την ακύρωση των παιδικών coroutine μέσω του μηχανισμού ακύρωσης του πλαισίου coroutine. Αν μια από τις coroutine μέσα στο coroutineScope ακυρωθεί (π.χ., λόγω εξαίρεσης ή ρητής ακύρωσης), τότε ολόκληρο το coroutineScope λαμβάνει το σήμα ακύρωσης.

Αυτό συμβαίνει επειδή όλες οι coroutine μέσα στο coroutineScope κληρονομούν ένα κοινό CoroutineContext, που περιέχει ένα Job. Όταν αυτό το Job ακυρωθεί, όλες οι παιδικές coroutine ακυρώνονται επίσης.

Έτσι, το coroutineScope παρακολουθεί την κατάσταση των παιδικών coroutine μέσω του κοινού πλαισίου και αντιδρά στην ακύρωσή τους, διακόπτοντας την εκτέλεση και ρίχνοντας μια εξαίρεση CancellationException, αν χρειάζεται.

Παράδειγμα:

suspend fun παράδειγμα() = coroutineScope {
    val job = launch {
        // κάποια εργασία
        delay(1000)
    }
    delay(500)
    job.cancel() // ακυρώνουμε την παιδική coroutine
    // το coroutineScope θα ανιχνεύσει την ακύρωση και θα διακοπεί
}