Kotlin Coroutines'ta hangi temel sınıflar vardır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kotlin Coroutines içindeki temel sınıflar ve kavramlar:
-
CoroutineScope: İçinde başlatılan koroutinelerin yaşam döngüsünü tanımlar. Tüm alt koroutineleri iptal etmeye olanak tanır. -
Job: Bir koroutineye ait bir tutamağı temsil eder. Durumunu izlemeye, tamamlanmasını beklemeye, iptal etmeye olanak sağlar. -
Deferred:Job'un özel bir türü olup, daha sonra erişilebilecek bir değeri temsil eder. Sonuç döndüren asenkron hesaplamalar için kullanılır. Sonuç.await()fonksiyonu ile alınabilir. -
Dispatcher: Koroutine'nin çalıştığı thread veya thread havuzunu belirler. Ana dispatcherlar:Dispatchers.Default: CPU yoğun görevler için optimize edilmiştir. Paylaşılan bir thread havuzu kullanır.Dispatchers.IO: Ağ veya disk I/O işlemleri için optimize edilmiştir. Uygun sayıda thread kullanır.Dispatchers.Main: Ana UI thread'i. UI güncellemeleri için kullanılır. Android ve uygun bağımlılıkları olan diğer platformlarda mevcuttur.Dispatchers.Unconfined: Koroutine'yi mevcut thread'de başlatır, ancak suspend eden fonksiyonu yeniden başlatan thread'de devam eder.
-
Suspending function:suspendanahtar kelimesi ile işaretlenmiş ve daha sonra duraklatılıp devam ettirilebilen fonksiyon. Diğer suspending fonksiyonları çağırabilir. -
runBlocking: Mevcut thread'i, kapsamındaki tüm koroutineler tamamlanana kadar engeller. Genellikle testlerde ve main fonksiyonlarında kullanılır. -
launch: Yeni bir koroutine başlatır, mevcut thread'i engellemez ve birJobdöner. -
async: Yeni bir koroutine başlatır, mevcut thread'i engellemez ve birDeferreddöner.
Kullanım örneği:
// CoroutineScope, launch ve Dispatchers.IO kullanımı örneği
import kotlinx.coroutines.*
fun main() = runBlocking {
// CoroutineScope oluşturma
val scope = CoroutineScope(Dispatchers.IO)
// IO dispatcher'da koroutine başlatma
val job: Job = scope.launch {
// Ağ isteği veya başka bir I/O işlemi yapma
delay(1000) // İşlem simülasyonu
println("Koroutine ${Thread.currentThread().name} içinde tamamlandı")
}
// Koroutine'nin tamamlanmasını bekle
job.join()
println("Main fonksiyonu tamamlandı")
}
// async ve Deferred kullanımı örneği
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferredSum: Deferred<Int> = async {
delay(500)
1 + 1
}
// Sonucu bekle
val result = deferredSum.await()
println("Sonuç: $result")
}