Welke hoofdklassen bestaan er in Kotlin Coroutines?
sobes.tech AI
Antwoord van AI
Belangrijkste klassen en concepten in Kotlin Coroutines:
-
CoroutineScope: Bepaalt de levenscyclus van de coroutines die binnen hem worden gestart. Maakt het mogelijk om alle kind-coroutines te annuleren. -
Job: Vertegenwoordigt een handle naar een coroutine. Maakt het mogelijk om de status te volgen, te wachten op voltooiing, te annuleren. -
Deferred: Een speciaal typeJobdat een waarde vertegenwoordigt die later beschikbaar zal zijn. Gebruikt voor asynchrone berekeningen die een resultaat teruggeven. Het resultaat kan worden verkregen met de.await()functie. -
Dispatcher: Bepaalt de thread of threadpool waarop de coroutine wordt uitgevoerd. De belangrijkste dispatchers:Dispatchers.Default: Geoptimaliseerd voor CPU-intensieve taken. Gebruikt een gedeelde threadpool.Dispatchers.IO: Geoptimaliseerd voor I/O-operaties (netwerk, schijf). Gebruikt een geschikte hoeveelheid threads.Dispatchers.Main: De hoofd-UI-thread. Voor het bijwerken van de UI. Beschikbaar op Android-platforms en andere met de juiste afhankelijkheid.Dispatchers.Unconfined: Start de coroutine in de huidige thread, maar hervat deze in elke thread die de suspending-functie hervat.
-
Suspending function: Functie gemarkeerd met hetsuspend-woord dat kan worden gepauzeerd en later hervat. Kan andere suspending-functies aanroepen. -
runBlocking: Blokkeert de huidige thread totdat alle coroutines in zijn scope zijn voltooid. Wordt voornamelijk gebruikt voor testen en in de main. -
launch: Start een nieuwe coroutine zonder de huidige thread te blokkeren en geeft eenJobterug. -
async: Start een nieuwe coroutine zonder de huidige thread te blokkeren en geeft eenDeferredterug.
Voorbeeld van gebruik:
// Voorbeeld van gebruik van CoroutineScope, launch en Dispatchers.IO
import kotlinx.coroutines.*
fun main() = runBlocking {
// Aanmaken van CoroutineScope
val scope = CoroutineScope(Dispatchers.IO)
// Starten van een coroutine in de IO dispatcher
val job: Job = scope.launch {
// Uitvoeren van een netwerkverzoek of andere I/O-operatie
delay(1000) // Simulatie van werk
println("Coroutine voltooid in ${Thread.currentThread().name}")
}
// Wachten op de coroutine
job.join()
println("Main functie voltooid")
}
// Voorbeeld van gebruik van async en Deferred
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferredSum: Deferred<Int> = async {
delay(500)
1 + 1
}
// Wachten op resultaat
val result = deferredSum.await()
println("Resultaat is: $result")
}