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
suspendkulcsszó és olyan függvények segítségével lehet szüneteltetni, amelyek maguk is szüneteltetik a végrehajtást (példáuldelay()). 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 aJob-jukon. Megszakításkor a korutinCancellationExceptionkivé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.