CodeBlanks Logo Icon CodeBlanks

SupervisorJob

SupervisorJob ile hata izolasyonu öğrenirsin.

SupervisorJob nedir?

SupervisorJob, çocuk coroutine'lerin hatalarını birbirine yaymayan özel bir Job türüdür. Normal bir Job bir çocuk hata verdiğinde tüm kardeşleri iptal eder; SupervisorJob ise hatayı yalnızca o çocuğa indirir.

Bu, bir isteğin başarısız olduğunda diğerlerini sürdürmek istediğin senaryolarda anlamlıdır. supervisorScope { ... } ile bir supervisor kapsam açar, içine birden fazla launch koyarsın. Bir çocuk çökerse diğerleri çalışmaya devam eder.

Uygulama supervisorScope ile iki launch

runBlocking içinde supervisorScope aç. İçinde val job = launch { println("İçeride") } yaz, sonra job.join() ile bekle. Kapanıştan sonra println("Dışarıda") yazdır.

Başlangıç kodu

Main.kt
// supervisorScope ile iki launch
// buraya yaz
fun main() = runBlocking {
    
}

Örnek çözüm

Main.kt
fun main() = runBlocking {
    supervisorScope {
        val job = launch {
            println("İçeride")
        }
        job.join()
    }
    println("Dışarıda")
}

Beklenen çıktı

İçeride
Dışarıda

supervisorScope kullanımı

supervisorScope bir suspending fonksiyondur; çağrıldığında yeni bir SupervisorJob ile child kapsamı oluşturur ve tüm çocuklar bitene kadar bekler. Bir çocuk hata verse bile diğerlerini iptal etmez.

Örnek: supervisorScope { launch { fetchA() }; launch { fetchB() } }. fetchA başarısız olursa fetchB yine de tamamlanır. Bu davranış, bağımsız işlerin paralel yürütülmesinde anlamlıdır; örn. birden fazla API çağrısının aynı anda yapılması.

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 SupervisorJob ne sağlar?

  • Tüm çocukları iptal eder
  • Daha hızlı çalışır
  • Thread sayısını artırır
  • Çocuk hatalarını izole eder Doğru cevap

Açıklama: SupervisorJob bir çocuğun hatasının diğerlerine yayılmasını engeller.

2 supervisor kapsam adını tamamla

Soru
supervisor____ {
    launch { fetchA() }
    launch { fetchB() }
}
Cevap
supervisorScope {
    launch { fetchA() }
    launch { fetchB() }
}

Açıklama: supervisorScope ile supervisor kapsam açılır.

3 SupervisorJob parçalarını eşle

Kavram Anlamı
SupervisorJob İzolasyon sağlar
supervisorScope Supervisor kapsam
Job Hata yayar
launch Çocuk başlatır

İleri seviye bölümündeki tüm dersler