Sobes.tech
Middle

Чӣ тавр сохторҳои async ва await дар забони барномасозии истифодашуда барои таҳияи барномаҳои Android кор мекунанд?

sobes.tech AI

Ҷавоб аз AI

Дар Kotlin, ки барои таҳияи Android истифода мешавад, async ва await функсияҳои китобхонаи корутинҳо мебошанд. Онҳо калидвожаҳои забон нестанд, ҳамчун дар баъзе забонҳои дигар.

async як корутин навро дар пасзамина оғоз мекунад ва объекти Deferred-ро бармегардонад, ки натиҷаи иҷроишро дар оянда намояндагӣ мекунад. Корутин, ки async-ро даъват кардааст, кори худро идома медиҳад, бидуни интизорӣ барои анҷоми амалиёти асинхронӣ.

await функсияи suspending аст, ки дар объект Deferred даъват мешавад. Вай иҷрои корутинро дар ҳоли ҳозир бозмедорад, то он даме, ки амалиёти асинхронӣ, ки бо async оғоз шудааст, ба анҷом расад ва натиҷаро баргардонад. Агар натиҷа аллакай дастрас бошад, await онро фавран бармегардонад.

Синтаксис:

import kotlinx.coroutines.*

suspend fun fetchUserData(): String {
    // Имомияи амалиёти дароз
    delay(1000)
    return "Маълумоти корбар"
}

suspend fun processData(data: String): String {
    // Имомияи амалиёти дигар дароз
    delay(2000)
    return "Коркардашуда: $data"
}

suspend fun main() {
    val deferredData = CoroutineScope(Dispatchers.IO).async {
        // Гирифтани маълумот ба таври асинхронӣ
        fetchUserData()
    }

    // Мо метавонем кори дигарро дар ҳоле, ки маълумот бор карда мешавад, анҷом диҳем

    val data = deferredData.await() // интизор шудан барои анҷоми fetchUserData()

    val processedResult = withContext(Dispatchers.Default) {
        // Коркарди маълумот, эҳтимолан дар сими дигар
        processData(data)
    }

    println(processedResult) // Натиҷа "Коркардашуда: Маълумоти корбар" пас аз таъхирҳо мебарояд
}

Мавқеъҳои асосӣ:

  • async Deferred-ро бармегардонад, ки ҳамчун "ваъда" барои натиҷа аст.
  • await функсияи suspending аст, ки корутинро дар ҳоли ҳозир бозмедорад.
  • Дар контексти корутинҳо барои амалиёти асинхронӣ, ки блок намекунад, истифода мешавад.
  • Имкон медиҳад, ки чандин вазифаҳои асинхрониро дар параллел иҷро кардан ва натиҷаҳои онҳоро ҷамъоварӣ кардан.