Scope, coroutine iptalini nasıl izler?
sobes.tech yapay zeka
AI'dan gelen yanıt
Scope, Job nesnesi aracılığıyla bir coroutine iptalini izler. Her CoroutineScope ile ilişkili bir Job vardır.
Bir CoroutineScope içinde yeni bir coroutine oluşturulduğunda, bu coroutine, bu scope'un Job'unu ebeveyn Job olarak alır.
İptal izleme mekanizması şu şekilde çalışır:
- Scope İptali: Scope'un
Job'undacancel()çağrıldığında, bu işlem tüm altJob'larıyla birlikte onları da iptal eder. - Alt Coroutine İptali: Bir alt coroutine (örneğin,
withContext(NonCancellable)kullanılarak) iptal edildiğinde veya işlenmemiş bir istisna oluştuğunda, bu coroutine, ebeveynJob'una bilgi verir. EbeveynJob(scope'un) ise diğer alt coroutine'larını iptal edebilir. - Kooperatif İptal: Koroutinler, kooperatif olmalı ve iptale karşı durmalı. Bu, coroutine içindeki kodun, iptal edilip edilmediğini düzenli olarak kontrol etmesi anlamına gelir, böylece işi düzgün şekilde sonlandırabilir.
delay, I/O işlemleri gibi suspend fonksiyonlar,Jobdurumunu otomatik olarak kontrol eder.
Kod, isActive veya ensureActive() kullanarak iptali açıkça kontrol edebilir:
// Bir coroutine'in etkinliğinin kontrolü örneği
suspend fun fetchData() = coroutineScope {
launch {
while (isActive) {
// Uzun süren bir işlem yap
delay(100) // askıya alma noktası - otomatik olarak iptali kontrol eder
// Veya açıkça kontrol et
if (!isActive) {
break // iptal durumunda döngüden çık
}
}
println("fetchData coroutine tamamlandı")
}
}
ensureActive() kullanımı, iptal durumunda CancellationException fırlatır:
// ensureActive() kullanımı
suspend fun processData() {
// ... bazı işler ...
ensureActive() // Coroutine iptal edilirse CancellationException fırlatır
// ... sadece coroutine aktifse devam et ...
}
CancellationException, iptal sinyalini iletmek için standart yoldur. Bu, coroutine iptali bağlamında bir hata olarak görülmemelidir.
Scope, Job'u sahip olarak, Job'lar arasında "ebeveyn-çocuk" hiyerarşisi oluşturur ve bu, ebeveyn Job'dan çocuk Joblara iptal sinyalinin yayılmasını sağlar. Bu, koroutinlerde yapılandırılmış paralelliğin temelidir.