Jaké hlavní třídy existují v Kotlin Coroutines?
sobes.tech AI
Odpověď od AI
Hlavní třídy a koncepty v Kotlin Coroutines:
-
CoroutineScope: Určuje životní cyklus coroutine spuštěných uvnitř něj. Umožňuje zrušit všechny podřízené coroutines. -
Job: Představuje odkaz na coroutine. Umožňuje sledovat její stav, počkat na její dokončení, zrušit ji. -
Deferred: Speciální typJob, který představuje hodnotu, jež bude dostupná později. Používá se pro asynchronní výpočty, které vracejí výsledek. Výsledek lze získat pomocí funkce.await(). -
Dispatcher: Určuje vlákno nebo skupinu vláken, ve kterém se coroutine provádí. Hlavní dispatcher:Dispatchers.Default: Optimalizováno pro CPU-intenzivní úkoly. Používá sdílenou skupinu vláken.Dispatchers.IO: Optimalizováno pro I/O operace (síť, disk). Používá vhodný počet vláken.Dispatchers.Main: Hlavní vlákno UI. Pro aktualizaci UI. Dostupné na platformách Android a dalších s odpovídající závislostí.Dispatchers.Unconfined: Spouští coroutine v aktuálním vlákně, ale pokračuje v jakémkoli vlákně, které obnoví suspendující funkci.
-
Suspending function: Funkce označená klíčovým slovemsuspend, která může být pozastavena a později obnovena. Může volat jiné suspending funkce. -
runBlocking: Blokuje aktuální vlákno, dokud všechny coroutine v jeho rozsahu neskončí. Používá se hlavně pro testování a v main. -
launch: Spouští novou coroutine bez blokování aktuálního vlákna a vracíJob. -
async: Spouští novou coroutine bez blokování aktuálního vlákna a vracíDeferred.
Příklad použití:
// Příklad použití CoroutineScope, launch a Dispatchers.IO
import kotlinx.coroutines.*
fun main() = runBlocking {
// Vytvoření CoroutineScope
val scope = CoroutineScope(Dispatchers.IO)
// Spuštění coroutine v dispatcheru IO
val job: Job = scope.launch {
// Provádění síťové žádosti nebo jiné I/O operace
delay(1000) // Simulace práce
println("Coroutine dokončena v ${Thread.currentThread().name}")
}
// Čekání na dokončení coroutine
job.join()
println("Hlavní funkce dokončena")
}
// Příklad použití async a Deferred
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferredSum: Deferred<Int> = async {
delay(500)
1 + 1
}
// Čekání na výsledek
val result = deferredSum.await()
println("Výsledek je: $result")
}