İş Birlikli İptal: isActive ve ensureActive
isActive denetimi yapıp ensureActive çağırarak koroutinleri iptal edilebilir hâle getirin.
İş Birlikli İptal: isActive ve ensureActive, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.
İşbirlikçi İptal Neden Gerekli
Kotlin eş yordamları işbirlikçi iptal kullanır: İptal edilen bir eş yordam, yalnızca iptal durumunu denetleyerek işbirliği yaptığında durdurulur. Sıkı bir CPU döngüsü, denetim yapana kadar durmaz.
import kotlinx.coroutines.*
fun main() = runBlocking {
val job = launch {
var i = 0
while (true) { i++ } // never checks — never cancels!
}
delay(100)
job.cancel()
println("cancel sent but loop kept running until process ended")
}isActive Denetimi
isActive, iptal istendiğinde false döndüren bir CoroutineScope özelliğidir. Bir döngüde bunu denetlemek, eş yordamın işbirliği yapmasını sağlar.
import kotlinx.coroutines.*
fun main() = runBlocking {
val job = launch {
var i = 0
while (isActive) {
i++
}
println("Loop exited after $i iterations")
}
delay(10)
job.cancel()
job.join()
}ensureActive()
ensureActive(), eş yordam iptal edilmişse CancellationException fırlatır. if (!isActive) throw CancellationException() ifadesinin doğrudan kullanılabilen karşılığıdır.
import kotlinx.coroutines.*
fun main() = runBlocking {
val job = launch {
try {
repeat(1_000_000) {
ensureActive() // throws if cancelled
// heavy computation here
}
} catch (e: CancellationException) {
println("Cancelled at iteration")
throw e
}
}
delay(5)
job.cancel()
job.join()
}İşbirlikçi Nokta Olarak yield()
yield(), eş yordamı kısa süreliğine askıya alır; böylece zamanlayıcı iptali denetleyebilir ve diğer eş yordamları çalıştırabilir.
import kotlinx.coroutines.*
fun main() = runBlocking {
val job = launch {
repeat(10) { i ->
yield() // cooperative cancellation point + gives up scheduler
println("Step $i")
}
}
delay(2)
job.cancel()
job.join()
println("Done")
}isActive ve ensureActive Karşılaştırması
Koşullu mantık için isActive kullanın (örneğin bir döngüden kontrollü biçimde çıkmak için). İptali hemen bir istisna olarak yaymak istediğinizde ensureActive() kullanın.
import kotlinx.coroutines.*
fun main() = runBlocking {
launch {
repeat(100) { i ->
if (!isActive) {
println("Stopping at $i, cleaning up...")
return@launch
}
// work
}
}.also { delay(5); it.cancel(); it.join() }
}CancellationException Özeldir
CancellationException üst öğeye yayılmaz — normal iptali bildirir. Bunu asla yutmayın; her zaman yeniden fırlatın veya yayılmasına izin verin.
import kotlinx.coroutines.*
fun main() = runBlocking {
val job = launch {
try {
delay(1000)
} catch (e: CancellationException) {
println("Caught cancellation, rethrowing")
throw e // important!
}
}
delay(50)
job.cancel()
job.join()
println("Job state: ${job.isCancelled}")
}CPU'ya Bağlı Çalışmalarda İptal
CPU'ya bağlı çalışmalarda, zamanında iptale izin vermek için doğal kontrol noktalarına ensureActive() veya yield() ekleyin.
import kotlinx.coroutines.*
suspend fun heavyCompute(n: Int): Long {
var result = 0L
for (i in 0..n) {
ensureActive()
result += i
}
return result
}
fun main() = runBlocking {
val job = launch(Dispatchers.Default) {
println(heavyCompute(1_000_000))
}
delay(10)
job.cancel()
job.join()
}Özel Askıya Alınabilir Fonksiyonda isActive
isActive değerine herhangi bir askıya alınabilir fonksiyonun içinde coroutineContext.isActive aracılığıyla veya currentCoroutineContext().isActive kullanarak erişebilirsiniz.
import kotlinx.coroutines.*
suspend fun checkable() {
while (currentCoroutineContext().isActive) {
delay(10)
println("tick")
}
}
fun main() = runBlocking {
val job = launch { checkable() }
delay(35)
job.cancel()
job.join()
}Kaynakların Temizlenmesiyle İptal
İşbirlikçi iptal kullanılsa bile kaynaklar finally bloklarında temizlenebilir — iptal istisnası bu bloklardan geçerek yayılmaya devam eder.
import kotlinx.coroutines.*
fun main() = runBlocking {
val job = launch {
try {
repeat(100) { i ->
ensureActive()
delay(20)
println("Working $i")
}
} finally {
println("Cleanup done")
}
}
delay(50)
job.cancel()
job.join()
}isActive ile Yoklama
Yoklama döngüleri isActive için mükemmel bir kullanım alanıdır: korutin iptal edilene kadar yoklamayı sürdürün.
import kotlinx.coroutines.*
fun main() = runBlocking {
val job = launch {
while (isActive) {
println("Polling...")
delay(100)
}
println("Poller stopped")
}
delay(350)
job.cancel()
job.join()
}Thread.interrupted() ile Farkı
Java iş parçacıklarının aksine, Kotlin korutinleri kesme bayraklarına dayanmaz. İptal, istisnalar ve kapsam durumu aracılığıyla modellenir; bu da onu bileştirilebilir ve yapılandırılmış hâle getirir.
import kotlinx.coroutines.*
fun main() = runBlocking {
// Kotlin way: cooperative via isActive / ensureActive
launch {
ensureActive()
println("Kotlin coroutine: cancellation is explicit and structured")
}
}Hızlı Kontrol
Bir korutin iptal edildiğinde hangi fonksiyon hemen istisna fırlatır?
Özet
İşbirlikçi iptal açık kontrol noktaları gerektirir: koşullu çıkış için isActive, hemen istisna fırlatmak için ensureActive(), askıya alıp iş parçacığını serbest bırakmak için yield(). CancellationException istisnasını asla yutmayın.
Yapay zeka eğitmeniyle Kotlin öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 51
- Dersler
- 203
Sıkça Sorulan Sorular
“İş Birlikli İptal: isActive ve ensureActive” dersi ücretsiz mi?
Evet — “İş Birlikli İptal: isActive ve ensureActive” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.
“İş Birlikli İptal: isActive ve ensureActive” dersinde ne öğreneceğim?
isActive denetimi yapıp ensureActive çağırarak koroutinleri iptal edilebilir hâle getirin. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“İş Birlikli İptal: isActive ve ensureActive” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- İş Birlikli İptal: isActive ve ensureActive
- withTimeout ve withTimeoutOrNull
- finally ve NonCancellable ile Temizleme
- Koroutin Hiyerarşilerinde İptal Yayılımı