Sobes.tech
Middle

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í typ Job, 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 slovem suspend, 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")
}