Sobes.tech
Middle

Kotlin Coroutines'da qanday asosiy sinflar mavjud?

sobes.tech AI

AIdan javob

Kotlin Coroutines daftari va asosiy tushunchalar:

  • CoroutineScope: Ichida boshlagan korutinlarning hayot aylanishini belgilaydi. Barcha bolalar korutinlarini bekor qilish imkonini beradi.

  • Job: Korutina uchun tutqichni ifodalaydi. Holatini kuzatish, yakunlanishini kutish, bekor qilish imkonini beradi.

  • Deferred: Job ning maxsus turi bo‘lib, keyinchalik mavjud bo‘ladigan qiymatni ifodalaydi. Asinxron hisoblashlar uchun ishlatiladi, natija .await() funksiyasi yordamida olinadi.

  • Dispatcher: Korutina bajariladigan ip yoki iplar havuzini belgilaydi. Asosiy dispatcherlar:

    • Dispatchers.Default: CPU intensiv vazifalar uchun optimallashtirilgan. Umumiy iplar havuzidan foydalanadi.
    • Dispatchers.IO: Tarmoq, disk I/O operatsiyalari uchun optimallashtirilgan. Mos miqdordagi iplarni ishlatadi.
    • Dispatchers.Main: UI ning asosiy ipi. UI ni yangilash uchun. Android platformasi va boshqa mos keladigan bog‘lamlar bilan mavjud.
    • Dispatchers.Unconfined: Korutina hozirgi ipda boshlanadi, ammo suspending funksiyasini davom ettiradigan ipda davom etadi.
  • Suspending function: suspend kalit so‘zi bilan belgilangan va keyinchalik to‘xtatilishi va davom ettirilishi mumkin bo‘lgan funksiya. Boshqa suspending funksiyalarni chaqirishi mumkin.

  • runBlocking: Hozirgi ipni bloklaydi, uning doirasidagi barcha korutinlar tugaguncha. Asosan testlar va main funksiyalar uchun ishlatiladi.

  • launch: Yangi korutina boshlaydi, hozirgi ipni bloklamaydi va Job ni qaytaradi.

  • async: Yangi korutina boshlaydi, hozirgi ipni bloklamaydi va Deferred ni qaytaradi.

Foydalanish misoli:

// CoroutineScope, launch va Dispatchers.IO dan foydalanish misoli
import kotlinx.coroutines.*

fun main() = runBlocking {
    // CoroutineScope yaratish
    val scope = CoroutineScope(Dispatchers.IO)

    // IO dispatcher da korutina boshlash
    val job: Job = scope.launch {
        // Tarmoq so‘rovi yoki boshqa I/O operatsiyasi
        delay(1000) // Ishni simulyatsiya qilish
        println("Korutina ${Thread.currentThread().name} da tugadi")
    }

    // Korutinaning tugashini kutish
    job.join()
    println("Main funksiyasi tugadi")
}
// async va Deferred dan foydalanish misoli
import kotlinx.coroutines.*

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

    // Natijani kutish
    val result = deferredSum.await()
    println("Natija: $result")
}