Middle+
İptal edilemez bir coroutine nasıl uygularsınız?
sobes.tech yapay zeka
AI'dan gelen yanıt
İptal edilemeyen bir coroutine uygulamak için NonCancellable bağlamı kullanılabilir.
import kotlinx.coroutines.*
suspend fun performNonCancellableOperation() {
coroutineScope {
launch {
// Bu coroutine iptal edilebilir
delay(1000)
println("Bu coroutine çalıştı")
}
withContext(NonCancellable) {
// Bu coroutine iptal edilmeyecek, hatta ebeveyn scope iptal edilse bile
try {
delay(2000) // Uzun süren bir işlemin simülasyonu
println("İptal edilemeyen işlem tamamlandı")
} catch (e: CancellationException) {
// Coroutine hala CancellationException alabilir
// bazı durumlarda (örneğin, uygulama kapatılırken),
// ancak ebeveynin iptaline reaktif olarak iptal edilmez.
println("İptal edilemeyen işlem iptal edildi: ${e.message}")
} finally {
// Bu blok iptal edilse bile çalışır
println("İptal edilemeyen işlem sona erdi (finally)")
}
}
}
}
NonCancellable kullanımı, coroutine iptal edildikten sonra kapanış işlemleri yapmak, veri kaydetmek veya kaynakları serbest bırakmak gibi işlemler için faydalıdır.
Önemli olan, NonCancellable'ın bağlamdan iptale karşı duyarsız hale getirdiği, ancak yine de sanal makine kapatıldığında veya diğer aşırı durumlarda iptal edilebileceğidir. Ayrıca, withContext(NonCancellable) içinde çağrılan ve kendisi iptali kontrol eden (örneğin, delay) bir askıya alınabilir fonksiyon, CancellationException fırlatabilir. Bu nedenle, bu durumları yönetmek için try-catch-finally kullanılması önerilir.