Sobes.tech
Middle

Кадом синфи асосӣ дар Kotlin Coroutines вуҷуд дорад?

sobes.tech AI

Ҷавоб аз AI

Класи ва консептҳои асосӣ дар Kotlin Coroutines:

  • CoroutineScope: Маҳдуд мекунад давраи ҳаёти корутинҳо, ки дар дохили он оғоз мешаванд. Имкон медиҳад, ки ҳамаи корутинҳои кӯдакиро бекор кардан мумкин аст.

  • Job: Ҳолати корутинро нишон медиҳад. Имкон медиҳад, ки ҳолати онро пайгирӣ кардан, интизор шудан барои анҷомёбӣ, бекор кардан.

  • Deferred: Навъи махсуси Job, ки арзишро, ки баъд дастрас мешавад, намояндагӣ мекунад. Барои ҳисобҳои асинхронӣ, ки натиҷа меоранд, истифода мешавад. Натиҷа бо .await() гирифта мешавад.

  • Dispatcher: Нишон медиҳад, ки корутин дар кадом сатр ё пул сатрҳо иҷро мешавад. Диспетчерҳои асосӣ:

    • Dispatchers.Default: Барои вазифаҳои CPU-сангин оптимизатсия шудааст. Пул умумии сатрҳоро истифода мебарад.
    • Dispatchers.IO: Барои амалиётҳои I/O (шабака, диск). Миқдори мувофиқи сатрҳоро истифода мебарад.
    • Dispatchers.Main: Сатр асосии UI. Барои навсозии UI. Дар платформаҳои Android ва дигарҳо бо вобастагии мувофиқ дастрас аст.
    • Dispatchers.Unconfined: Корутинро дар сатрҳои ҳозира оғоз мекунад, аммо онро дар ҳар сатр, ки функсияи suspending-ро навозиш мекунад, такмил медиҳад.
  • Suspending function: Функсия, ки бо калимаи калидии suspend ишора шудааст ва метавонад боздошта ва баъд такмил дода шавад. Мумкин аст, ки дигар функсияҳои suspending-ро даъват кунад.

  • runBlocking: Сатрро то анҷоми ҳамаи корутинҳо дар минтақаи он мепиндоранд. Аксар вақт барои санҷиш ва дар main истифода мешавад.

  • launch: Корутинро бидуни бастани сатр оғоз мекунад ва Job-ро бармегардонад.

  • async: Корутинро бидуни бастани сатр оғоз мекунад ва Deferred-ро бармегардонад.

Маслиҳат барои истифода:

// Маслиҳат барои истифодаи CoroutineScope, launch ва Dispatchers.IO
import kotlinx.coroutines.*

fun main() = runBlocking {
    // Сохтани CoroutineScope
    val scope = CoroutineScope(Dispatchers.IO)

    // Оғоз кардани корутин дар диспетчери IO
    val job: Job = scope.launch {
        // Иҷрои дархости шабака ё амалиёти I/O
        delay(1000) // Имитацияи кор
        println("Корутин дар ${Thread.currentThread().name} анҷом ёфт")
    }

    // интизор шудан барои анҷоми корутин
    job.join()
    println("Функсияи асосӣ анҷом ёфт")
}
// Маслиҳат барои истифодаи async ва Deferred
import kotlinx.coroutines.*

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

    // интизор шудан барои натиҷа
    val result = deferredSum.await()
    println("Натиҷа: $result")
}