Sobes.tech
Middle

Wat is de functie 'suspend' in Kotlin?

sobes.tech AI

Antwoord van AI

De suspend functie is een functie die onderbroken (suspend) kan worden en later hervat (resume). Ze vormen een fundamenteel onderdeel van coroutines in Kotlin en worden gebruikt om asynchrone operaties uit te voeren zonder het thread te blokkeren.

Belangrijke kenmerken:

  • Kan alleen worden aangeroepen vanuit een andere suspend functie of vanuit de context van een coroutine. De compiler zorgt voor deze beperking.
  • Blokkeert de thread niet. Tijdens het uitvoeren van een asynchrone operatie (bijvoorbeeld een netwerkverzoek), onderbreekt de suspend functie de uitvoering van de coroutine, waardoor de thread vrij komt voor andere taken. Wanneer de asynchrone operatie voltooid is, wordt de coroutine hervat vanaf waar deze was gestopt.
  • Wordt gebruikt voor gestructureerde parallelisme. In combinatie met functies zoals launch en async uit de kotlinx.coroutines bibliotheek, maakt het schrijven van asynchrone code in een sequentiële, gemakkelijk leesbare stijl mogelijk.
  • De compiler transformeert suspend functies in eindige automaten. Dit maakt het mogelijk om de staat van de coroutine tussen de onderbrekingspunten te bewaren.

Voorbeeld:

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    // Simulatie van een asynchrone operatie (bijvoorbeeld een netwerkverzoek)
    delay(1000) // onderbrekingspunten
    return "Data geladen"
}

fun main() = runBlocking {
    println("Begin met laden...")
    val data = fetchData() // aanroep van een suspend functie
    println(data)
    println("Laden voltooid")
}

Hier is fetchData een suspend functie die delay gebruikt (nog een suspend functie) om een vertraging te simuleren. delay is een onderbrekingspunt. runBlocking creëert een coroutine scope om main uit te voeren als een blokkerende thread, maar binnenin wordt fetchData asynchroon uitgevoerd.