Sobes.tech
Middle

Milyen fő osztályok vannak a Kotlin Coroutines-ban?

sobes.tech MI

Válasz az MI-től

A Kotlin Coroutines főbb osztályai és fogalmai:

  • CoroutineScope: Meghatározza a benne indított korutinok életciklusát. Lehetővé teszi az összes gyermekkorutin leállítását.

  • Job: Egy korutina kezelője. Lehetővé teszi az állapotának nyomon követését, a befejezésének várását, leállítását.

  • Deferred: Egy speciális Job típus, amely egy később elérhető értéket képvisel. Aszinkron számításokra használják, eredményt ad vissza. Az eredményt a .await() függvénnyel lehet elérni.

  • Dispatcher: Meghatározza a szálat vagy szálak poolját, ahol a korutina fut. A fő dispatcher-ek:

    • Dispatchers.Default: CPU-intenzív feladatokra optimalizált. Egy megosztott szálpultot használ.
    • Dispatchers.IO: I/O műveletekre (hálózat, lemez) optimalizált. Megfelelő számú szálat használ.
    • Dispatchers.Main: A fő UI szál. UI frissítésére. Android platformon és más, megfelelő függőséggel rendelkező platformokon elérhető.
    • Dispatchers.Unconfined: A korutina a jelenlegi szálon indul, de a suspendáló függvényt bármelyik szálon folytatja, amely újraindítja.
  • Suspending function: A suspend kulcsszóval jelölt függvény, amely szüneteltethető és később folytatható. Más suspending függvényeket is hívhat.

  • runBlocking: Blokkolja a jelenlegi szálat, amíg az összes korutina be nem fejeződik a hatókörében. Főként tesztekhez és a main-ben használják.

  • launch: Új korutina indítása anélkül, hogy blokkolná a jelenlegi szálat, és egy Job-ot ad vissza.

  • async: Új korutina indítása anélkül, hogy blokkolná a jelenlegi szálat, és egy Deferred-et ad vissza.

Használati példa:

// CoroutineScope, launch és Dispatchers.IO példák
import kotlinx.coroutines.*

fun main() = runBlocking {
    // CoroutineScope létrehozása
    val scope = CoroutineScope(Dispatchers.IO)

    // Korutina indítása az IO dispatcher-en
    val job: Job = scope.launch {
        // Hálózati kérés vagy más I/O művelet végrehajtása
        delay(1000) // Munka szimulálása
        println("Korutina befejeződött a ${Thread.currentThread().name} szálon")
    }

    // Várakozás a korutina befejezésére
    job.join()
    println("Main függvény befejeződött")
}
// async és Deferred példák
import kotlinx.coroutines.*

fun main() = runBlocking {
    val deferredSum: Deferred<Int> = async {
        delay(500)
        1 + 1
    }

    // Eredmény várása
    val result = deferredSum.await()
    println("Eredmény: $result")
}