Kokios pagrindinės klasės yra Kotlin Coroutines?
sobes.tech AI
Atsakymas iš AI
Pagrindiniai Kotlin Coroutines klasės ir koncepcijos:
-
CoroutineScope: Nustato korutinų gyvavimo ciklą, pradėtą jo viduje. Leidžia atšaukti visas vaikų korutinas. -
Job: Atstovauja nuorodą į korutiną. Leidžia stebėti jos būseną, laukti jos pabaigos, atšaukti. -
Deferred: YpatingasJobtipas, kuris atstovauja reikšmę, kuri bus prieinama vėliau. Naudojamas asinchroniniams skaičiavimams, grąžinantiems rezultatą. Rezultatą galima gauti naudojant.await()funkciją. -
Dispatcher: Nustato srautą arba srautų baseiną, kuriame vykdoma korutina. Pagrindiniai dispečeriai:Dispatchers.Default: Optimizuotas CPU intensyviems užduotims. Naudoja bendrą srautų baseiną.Dispatchers.IO: Optimizuotas I/O operacijoms (tinklas, diskas). Naudoja tinkamą srautų skaičių.Dispatchers.Main: Pagrindinis UI srautas. Skirtas UI atnaujinimui. Pasiekiamas Android ir kitose platformose su atitinkama priklausomybe.Dispatchers.Unconfined: Pradeda korutiną dabartiniame sraute, bet ją atnaujina bet kuriame sraute, kuris atnaujino suspending-funkciją.
-
Suspending function: Funkcija, pažymėta raktiniu žodžiususpend, ir gali būti sustabdyta bei vėl atnaujinta vėliau. Gali kviesti kitas suspending-funkcijas. -
runBlocking: Blokuoja dabartinį srautą iki visų korutinų pabaigos. Naudojama dažniausiai testavimui irmainfunkcijose. -
launch: Paleidžia naują korutiną be dabartinio srauto blokavimo ir grąžinaJob. -
async: Paleidžia naują korutiną be dabartinio srauto blokavimo ir grąžinaDeferred.
Pavyzdžiai:
// Pavyzdys naudojant CoroutineScope, launch ir Dispatchers.IO
import kotlinx.coroutines.*
fun main() = runBlocking {
// Sukurti CoroutineScope
val scope = CoroutineScope(Dispatchers.IO)
// Paleisti korutiną IO dispečeryje
val job: Job = scope.launch {
// Vykdyti tinklo užklausą ar kitą I/O operaciją
delay(1000) // Imituoja darbą
println("Korutina baigėsi ${Thread.currentThread().name}")
}
// Laukti korutinos pabaigos
job.join()
println("Pagrindinė funkcija baigėsi")
}
// Pavyzdys naudojant async ir Deferred
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferredSum: Deferred<Int> = async {
delay(500)
1 + 1
}
// Laukti rezultato
val result = deferredSum.await()
println("Rezultatas yra: $result")
}