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
asyncDeferred-t ad vissza, ami egy "ígéret" az eredményre. - Az
awaitegy 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.