Sobes.tech
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 suspend funktsiooni või korutina kontekstist. Kompilaator tagab selle piirangu.
  • Ei blokeeri voogu. Asünkroonse operatsiooni (näiteks võrgupäringu) teostamisel peatab suspend funktsioon 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 launch ja async funktsioonidega kotlinx.coroutines raamatukogust võimaldab kirjutada asünkroonset koodi järjestikuses, kergesti loetavas stiilis.
  • Kompilaator teisendab suspend funktsioonid 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.