Sobes.tech
Middle

Kotlin Coroutines-də əsas sinflər hansılardır?

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin Coroutines-də əsas siniflər və anlayışlar:

  • CoroutineScope: İçində başladılan korutinlərin həyat dövrünü müəyyən edir. Bütün uşaq korutinlərini ləğv etməyə imkan verir.

  • Job: Bir korutina üçün tutacaqdır. Onun vəziyyətini izləməyə, tamamlanmasını gözləməyə, ləğv etməyə imkan verir.

  • Deferred: Job-un xüsusi növü olub, daha sonra mövcud olacaq dəyəri təmsil edir. Asinxron hesablamalar üçün istifadə olunur və nəticə .await() funksiyası ilə əldə edilir.

  • Dispatcher: Korutinanın icra olunduğu ip və ya ip hovuzunu müəyyən edir. Əsas dispatcherlər:

    • Dispatchers.Default: CPU intensiv tapşırıqlar üçün optimallaşdırılmışdır. Ümumi ip hovuzundan istifadə edir.
    • Dispatchers.IO: Şəbəkə və disk I/O əməliyyatları üçün optimallaşdırılmışdır. Uyğun sayda ip istifadə edir.
    • Dispatchers.Main: UI-nin əsas ipi. UI-ni yeniləmək üçün. Android və digər platformalarda mövcuddur.
    • Dispatchers.Unconfined: Korutinanı mövcud ipdə başladır, lakin onu suspend edən funksiyanı hər hansı ipdə davam etdirir.
  • Suspending function: suspend açar sözü ilə işarələnmiş və daha sonra dayandırılıb yenidən başlaya bilən funksiyadır. Digər suspending funksiyaları çağıra bilər.

  • runBlocking: Mövcud ipi bloklayır və onun sahəsindəki bütün korutinlər tamamlanana qədər gözləyir. Əsasən testlər və main funksiyasında istifadə olunur.

  • launch: Yeni korutina başladır, mövcud ipi bloklamır və Job qaytarır.

  • async: Yeni korutina başladır, mövcud ipi bloklamır və Deferred qaytarır.

İstifadə nümunəsi:

// CoroutineScope, launch və Dispatchers.IO istifadə nümunəsi
import kotlinx.coroutines.*

fun main() = runBlocking {
    // CoroutineScope yaradılması
    val scope = CoroutineScope(Dispatchers.IO)

    // IO dispatcher-də korutina başlatmaq
    val job: Job = scope.launch {
        // Şəbəkə sorğusu və ya digər I/O əməliyyatı
        delay(1000) // İşin simulyasiyası
        println("Korutina ${Thread.currentThread().name} daxilində tamamlandı")
    }

    // Korutinanın tamamlanmasını gözləmək
    job.join()
    println("Main funksiyası tamamlandı")
}
// async və Deferred istifadə nümunəsi
import kotlinx.coroutines.*

fun main() = runBlocking {
    val deferredSum: Deferred<Int> = async {
        delay(500)
        1 + 1
    }

    // Nəticəni gözləmək
    val result = deferredSum.await()
    println("Nəticə: $result")
}