Sobes.tech
Middle

Kas yra 'suspend' funkcija Kotlin?

sobes.tech AI

Atsakymas iš AI

suspend funkcija — tai funkcija, kurią galima laikinai sustabdyti (suspend) ir vėl atnaujinti (resume) vėliau. Ji yra pagrindinė korutinos (coroutines) dalis Kotlin ir naudojama asinchroninėms operacijoms vykdyti be srauto blokavimo.

Pagrindinės savybės:

  • Gali būti iškviesta tik iš kitos suspend funkcijos arba iš korutinos konteksto. Kompiliatorius užtikrina šį apribojimą.
  • Ne blokuoja srauto. Atliekant asinchroninę operaciją (pvz., tinklo užklausą), suspend funkcija laikinai sustabdo korutinos vykdymą, atlaisvindama srautą kitoms užduotims. Kai asinchroninė operacija baigiasi, korutina atnaujinama nuo sustojimo vietos.
  • Naudojama struktūrizuotam paralelizmui. Derinant su launch ir async funkcijomis iš kotlinx.coroutines bibliotekos, leidžia rašyti asinchroninį kodą nuosekliame, lengvai skaitomame stiliuje.
  • Kompiliatorius paverčia suspend funkcijas į galutinius automatus. Tai leidžia išsaugoti korutinos būseną tarp sustojimo taškų.

Pavyzdys:

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    // Asinchroninės operacijos imitacija (pvz., tinklo užklausa)
    delay(1000) // suspend taškai
    return "Duomenys įkelti"
}

fun main() = runBlocking {
    println("Pradedame įkėlimą...")
    val data = fetchData() // iškviečiama suspend funkcija
    println(data)
    println("Įkėlimas baigtas")
}

Čia fetchData yra suspend funkcija, kuri naudoja delay (dar viena suspend funkcija), kad imituotų vėlavimą. delay yra sustojimo taškas. runBlocking sukuria korutinos sritį main vykdymui kaip blokuojantį srautą, tačiau viduje fetchData vyksta neblokiruojančiu būdu.