Middle
Šta je funkcija 'suspend' u Kotlinu?
sobes.tech АИ
Одговор од АИ
Funkcija suspend je funkcija koja može biti suspendovana (suspend) i nastavljena (resume) kasnije. One su osnovni deo korutina u Kotlinu i koriste se za izvršavanje asinhronih operacija bez blokiranja niti.
Ključne karakteristike:
- Može biti pozvana samo iz druge
suspendfunkcije ili iz konteksta korutine. Kompilator garantuje ovo ograničenje. - Ne blokira nit. Tokom izvršavanja asinhrone operacije (npr. mrežnog zahteva),
suspendfunkcija zaustavlja izvršenje korutine, oslobađajući nit za druge zadatke. Kada asinhrona operacija završi, korutina se nastavlja od mesta gde je zaustavljena. - Koristi se za strukturirani paralelizam. U kombinaciji sa funkcijama kao što su
launchiasynciz bibliotekekotlinx.coroutines, omogućava pisanje asinhronog koda u sekvencijalnom, lako čitljivom stilu. - Kompajler pretvara
suspendfunkcije u završne automate. Ovo omogućava da se stanje korutine sačuva između tačaka zaustavljanja.
Primer:
import kotlinx.coroutines.*
suspend fun fetchData(): String {
// Simulacija asinhrone operacije (npr. mrežni zahtev)
delay(1000) // tačke zaustavljanja
return "Podaci učitani"
}
fun main() = runBlocking {
println("Početak učitavanja...")
val data = fetchData() // poziv suspend funkcije
println(data)
println("Učitavanje završeno")
}
Ovde, fetchData je suspend funkcija koja koristi delay (još jedna suspend funkcija) za simulaciju kašnjenja. delay je tačka zaustavljanja. runBlocking kreira opseg korutine za izvršenje main kao blokirajući nit, ali unutar nje fetchData se izvršava neblokirajuće.