Sobes.tech
Middle

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: suspend anahtar 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 bir Job döner.

  • async: Yeni bir koroutine başlatır, mevcut thread'i engellemez ve bir Deferred dö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")
}