Middle
Mis on 'suspend' funktsioon Kotlinis?
sobes.tech AI
Vastus AI-lt
suspend funktsioon — see on funktsioon, mida saab peatada (suspend) ja hiljem uuesti alustada (resume). Nad on põhiosa korutinides (coroutines) Kotlinis ning kasutatakse asünkroonsete operatsioonide teostamiseks ilma voogu blokeerimata.
Peamised omadused:
- Võib kutsuda ainult teise
suspendfunktsiooni või korutina kontekstist. Kompilaator tagab selle piirangu. - Ei blokeeri voogu. Asünkroonse operatsiooni (näiteks võrgupäringu) teostamisel peatab
suspendfunktsioon korutina täitmise, vabastades voolu teistele ülesannetele. Kui asünkroonne operatsioon on lõpetatud, jätkub korutina sealt, kus see peatati. - Kasutatakse struktureeritud paralleelsuse jaoks. Koos
launchjaasyncfunktsioonidegakotlinx.coroutinesraamatukogust võimaldab kirjutada asünkroonset koodi järjestikuses, kergesti loetavas stiilis. - Kompilaator teisendab
suspendfunktsioonid lõppautomaatideks. See võimaldab säilitada korutina olekut peatamise punktide vahel.
Näide:
import kotlinx.coroutines.*
suspend fun fetchData(): String {
// Asünkroonse operatsiooni imitatsioon (näiteks võrgupäring)
delay(1000) // peatamis punktid
return "Andmed on laetud"
}
fun main() = runBlocking {
println("Laadimine algab...")
val data = fetchData() // kutsutakse välja suspend funktsioon
println(data)
println("Laadimine lõppes")
}
Siin on fetchData suspend funktsioon, mis kasutab delay (veel üks suspend funktsioon), et imiteerida viivitust. delay on peatamispunkt. runBlocking loob korutinaala, et täita main kui blokeeriv voog, kuid sees fetchData täidetakse mitte-blokeerivalt.