Sobes.tech
Middle

Čo je funkcia 'suspend' v Kotlin?

sobes.tech AI

Odpoveď od AI

Funkcia suspend je funkcia, ktorú je možné pozastaviť (suspend) a neskôr pokračovať (resume). Sú základnou súčasťou korutín v Kotlin a slúžia na vykonávanie asynchrónnych operácií bez blokovania vlákna.

Kľúčové vlastnosti:

  • Môže byť volaná iba z inej suspend funkcie alebo z kontextu korutiny. Kompilátor zabezpečuje toto obmedzenie.
  • Neblokuje vlákno. Pri vykonávaní asynchrónnej operácie (napríklad sieťovej požiadavky) suspend funkcia pozastaví vykonávanie korutiny, uvoľní vlákno pre iné úlohy. Keď je asynchrónna operácia dokončená, korutina sa pokračuje od miesta, kde bola pozastavená.
  • Používa sa na štruktúrovanú paralelizáciu. V kombinácii s funkciami ako launch a async z knižnice kotlinx.coroutines, umožňuje písanie asynchrónneho kódu v sekvenčnom, ľahko čitateľnom štýle.
  • Kompilátor transformuje suspend funkcie na konečné automaty. To umožňuje zachovať stav korutiny medzi bodmi pozastavenia.

Príklad:

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    // Simulácia asynchrónnej operácie (napríklad sieťová požiadavka)
    delay(1000) // body pozastavenia
    return "Dáta načítané"
}

fun main() = runBlocking {
    println("Začíname načítanie...")
    val data = fetchData() // volanie suspend funkcie
    println(data)
    println("Načítanie ukončené")
}

Tu je fetchData suspend funkcia, ktorá používa delay (ďalšiu suspend funkciu) na simuláciu oneskorenia. delay je bod pozastavenia. runBlocking vytvára korutínový rozsah na vykonanie main ako blokujúceho vlákna, ale vo vnútri nej fetchData beží neblokujúco.