Sobes.tech
Middle

Hogyan működnek az async és await szerkezetek az Android alkalmazások fejlesztéséhez használt programozási nyelvben?

sobes.tech MI

Válasz az MI-től

Kotlinben, amit az Android fejlesztéshez használnak, az async és await a korutinok könyvtárának függvényei. Nem a nyelv kulcsszavai, mint néhány más nyelvben.

Az async egy új korutint indít háttérben, és egy Deferred típusú objektumot ad vissza, amely a végrehajtás eredményét jelképezi a jövőben. Az async-t hívó korutina folytatja a munkát anélkül, hogy várna a kezdett aszinkron művelet befejezésére.

Az await egy suspending függvény, amit egy Deferred objektumon hívnak meg. Megállítja a jelenlegi korutina végrehajtását, amíg az async-szal indított aszinkron művelet be nem fejeződik, és vissza nem adja az eredményt. Ha az eredmény már elérhető, az await azonnal visszaadja azt.

Szintaxis:

import kotlinx.coroutines.*

suspend fun fetchUserData(): String {
    // Hosszú művelet szimulációja
    delay(1000)
    return "Felhasználói adatok"
}

suspend fun processData(data: String): String {
    // Egy másik hosszú művelet szimulációja
    delay(2000)
    return "Feldolgozva: $data"
}

suspend fun main() {
    val deferredData = CoroutineScope(Dispatchers.IO).async {
        // Aszinkron adatlekérés
        fetchUserData()
    }

    // Más munkát is végezhetünk, amíg az adatok betöltődnek

    val data = deferredData.await() // Várakozás a fetchUserData() befejezésére

    val processedResult = withContext(Dispatchers.Default) {
        // Adatok feldolgozása, esetleg más szálon
        processData(data)
    }

    println(processedResult) // "Feldolgozva: Felhasználói adatok" fog megjelenni késleltetés után
}

Főbb pontok:

  • Az async Deferred-t ad vissza, ami egy "ígéret" az eredményre.
  • Az await egy suspending függvény, ami megállítja a hívó korutina végrehajtását.
  • A korutinok kontextusában használják, nem blokkoló aszinkron műveletekhez.
  • Lehetővé teszi több aszinkron feladat párhuzamos végrehajtását és eredményeik összegyűjtését.