Sobes.tech
Junior — Middle

Hogyan történik az aszinkron alkalmazásokban a coroutine-ok leállítása és szüneteltetése?

sobes.tech MI

Válasz az MI-től

Kotlinben a korutinokat Job és CoroutineScope objektumok segítségével kezelik. A korutinok szüneteltetéséhez és leállításához a következő mechanizmusokat használják:

  • Szüneteltetés — a korutinokat a suspend kulcsszó és olyan függvények segítségével lehet szüneteltetni, amelyek maguk is szüneteltetik a végrehajtást (például delay()). Ez nem blokkolja a szálat, hanem a korutin később folytatódik.

  • Megszakítás (leállítás) — a korutinokat a cancel() metódus hívásával lehet megszakítani a Job-jukon. Megszakításkor a korutin CancellationException kivételt kap, és helyesen kell befejeződnie.

Példa egy korutin megszakítására:

val job = CoroutineScope(Dispatchers.Default).launch {
    repeat(1000) { i ->
        println("Dolgozom $i ...")
        delay(500)
    }
}

// A korutin leállítása 2 másodperc múlva
CoroutineScope(Dispatchers.Default).launch {
    delay(2000)
    job.cancel()
    println("Korutin megszakítva")
}

Tehát a szüneteltetés a korutinok természetes része, a leállítás pedig azok Job-on keresztüli megszakítása.