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:Jobning 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:suspendkalit 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 vaJobni qaytaradi. -
async: Yangi korutina boshlaydi, hozirgi ipni bloklamaydi vaDeferredni 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")
}