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álisJobtí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: Asuspendkulcsszó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 egyJob-ot ad vissza. -
async: Új korutina indítása anélkül, hogy blokkolná a jelenlegi szálat, és egyDeferred-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")
}