Sobes.tech
Middle

Scope, korutinanın ləğv edilməsini necə izləyir?

sobes.tech Süni İntellekt

AI-dan cavab

Scope, Job obyektindən istifadə edərək korutinanın ləğvini izləyir. Hər CoroutineScope ilə əlaqəli Job var.

Bir CoroutineScope daxilində yeni korutina yaradıldıqda, ona bu scope-un Job-u valideyn Job kimi verilir.

Ləğv etmənin izlənməsi mexanizmi aşağıdakı kimi işləyir:

  1. Scope-un ləğvi: Scope-un Job-unda cancel() çağırıldıqda, bu, rekursiv olaraq bütün uşaqlar Job-larını ləğv edir.
  2. Uşaq Korutinasının ləğvi: Uşaq korutinası (məsələn, withContext(NonCancellable) vasitəsilə) və ya idarə olunmayan istisna baş verdikdə, bu, öz Job-una məlumat verir. Valideyn Job-u (scope-un) isə digər uşaq korutinasını ləğv edə bilər.
  3. Kooperativ Ləğv: Korutinalar kooperativ olmalıdır. Bu, korutina daxilində kodun mütəmadi olaraq ləğv olunub-olunmadığını yoxlaması və düzgün işləməsini təmin etməsi deməkdir. Suspend funksiyalar (məsələn, delay, I/O əməliyyatları) avtomatik olaraq Job-un vəziyyətini yoxlayır.

Kod, isActive və ya ensureActive() istifadə edərək ləğvi açıq şəkildə yoxlaya bilər:

// Korutinanın aktivliyini yoxlama nümunəsi
suspend fun fetchData() = coroutineScope {
    launch {
        while (isActive) {
            // Uzun müddətli əməliyyat yerinə yetir
            delay(100) // dayandırma nöqtəsi - avtomatik ləğv yoxlaması

            // və ya açıq şəkildə yoxlama
            if (!isActive) {
                break // ləğv zamanı döngüdən çıx
            }
        }
        println("fetchData korutinası tamamlandı")
    }
}

ensureActive() istifadə edildikdə, ləğv zamanı CancellationException atılır:

// ensureActive() istifadə nümunəsi
suspend fun processData() {
    // ... bəzi işlər ...
    ensureActive() // Korutina ləğv olunarsa, CancellationException atacaq
    // ... yalnız korutina aktivdirsə davam et ...
}

CancellationException standart ləğv siqnalını yaymaq üçün istifadə olunan yoldur. Bu, korutinaların ləğv edilməsində səhv kimi qəbul edilməməlidir.

Scope, Job-u ilə, "valideyn-uşaq" Job hierarxiyası yaradır ki, bu da valideyn Job-dan uşaqlara ləğv siqnalının yayılmasına imkan verir. Bu, strukturlaşdırılmış paralelliyin əsasını təşkil edir.