Middle
Mi az a 'suspend' függvény Kotlinban?
sobes.tech MI
Válasz az MI-től
A suspend függvény olyan függvény, amelyet meg lehet szüntetni (suspend) és később folytatni (resume). Ezek alapvető részei a Kotlin korutinjainak, és aszinkron műveletek végrehajtására használják anélkül, hogy blokkolnák a szálat.
Fő jellemzők:
- Csak egy másik
suspendfüggvényből vagy korutin kontextusból hívható meg. A fordító biztosítja ezt a korlátozást. - Nem blokkolja a szálat. Aszinkron művelet végrehajtásakor (pl. hálózati kérés), a
suspendfüggvény megszakítja a korutina végrehajtását, és felszabadítja a szálat más feladatokra. Amikor az aszinkron művelet befejeződik, a korutina ott folytatódik, ahol megszakadt. - Strukturált párhuzamosságra használják. A
launchésasynctípusú függvényekkel akotlinx.coroutineskönyvtárból lehetővé teszi az aszinkron kód írását szekvenciális, könnyen olvasható stílusban. - A fordító a
suspendfüggvényeket végállapot-automatákká alakítja. Ez lehetővé teszi a korutina állapotának megőrzését a megszakítási pontok között.
Példa:
import kotlinx.coroutines.*
suspend fun fetchData(): String {
// Aszinkron művelet szimulálása (pl. hálózati kérés)
delay(1000) // megszakítási pontok
return "Adatok betöltve"
}
fun main() = runBlocking {
println("Betöltés kezdése...")
val data = fetchData() // suspend függvény hívása
println(data)
println("Betöltés befejeződött")
}
Itt a fetchData egy suspend függvény, amely a delay (egy másik suspend függvény) segítségével szimulál egy késleltetést. A delay egy megszakítási pont. A runBlocking létrehoz egy korutin keretet, amely a main végrehajtását blokkoló szálként futtatja, de benne a fetchData aszinkron módon fut.