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 գործառույթ է, որը կանգնեցնում է կանչող կուռտինան։
  • Օգտագործվում է կուռտիների կոնտեքստում՝ ոչ բլոկավոր ասինխրոն գործողությունների համար։
  • Позволяет выполнять несколько асинхронных задач параллельно и собирать их результаты.