Millised on Kotlin Coroutines peamised klassid?
sobes.tech AI
Vastus AI-lt
Kotlin Coroutinesi põhiklassid ja kontseptsioonid:
-
CoroutineScope: Määrab korutiinide elutsükli, mis käivitatakse selle sees. Võimaldab tühistada kõik lapsed korutriinid. -
Job: Esindab viidet korutiinile. Võimaldab jälgida selle olekut, oodata selle lõpetamist, tühistada. -
Deferred: ErilineJobtüüp, mis esindab väärtust, mis saab olema saadaval hiljem. Kasutatakse asünkroonsete arvutuste jaoks, mis tagastavad tulemuse. Tulemuse saab kätte.await()funktsiooni abil. -
Dispatcher: Määrab niidi või niidipulga, kus korutiin täidetakse. Peamised dispetcherid:Dispatchers.Default: Optimeeritud CPU-intensiivsete ülesannete jaoks. Kasutab ühispulga niite.Dispatchers.IO: Optimeeritud I/O operatsioonidele (võrk, ketas). Kasutab sobivat niidide arvu.Dispatchers.Main: Peamine UI niit. UI uuendamiseks. Saadaval Androidil ja teistel platvormidel sobiva sõltuvusega.Dispatchers.Unconfined: Käivitab korutina jooksva niidil, kuid jätkab seda mis tahes niidil, mis uuendab suspending-funktsiooni.
-
Suspending function: Funktsioon, mis on märgitud võtmesõnagasuspendja võib olla peatatud ning hiljem uuesti alustatud. Võib kutsuda teisi suspending-funktsioone. -
runBlocking: Blokeerib jooksva niidi kuni kõik korutainid on lõpetatud. Kasutatakse peamiselt testimiseks jamain-funktsioonides. -
launch: Käivitab uue korutina ilma jooksva niidi blokeerimiseta ja tagastabJob. -
async: Käivitab uue korutina ilma jooksva niidi blokeerimiseta ja tagastabDeferred.
Näited kasutamiseks:
// Näide CoroutineScope, launch ja Dispatchers.IO kasutamisest
import kotlinx.coroutines.*
fun main() = runBlocking {
// Korutina ulatuse loomine
val scope = CoroutineScope(Dispatchers.IO)
// Korutina käivitamine IO dispetcheril
val job: Job = scope.launch {
// Võrgu päring või muu I/O operatsioon
delay(1000) // Imiteerib tööd
println("Korutina lõppes ${Thread.currentThread().name}" )
}
// Oodata korutina lõpetamist
job.join()
println("Peafunktsioon lõppes")
}
// Näide kasutades async ja Deferred
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferredSum: Deferred<Int> = async {
delay(500)
1 + 1
}
// Oodata tulemust
val result = deferredSum.await()
println("Tulemus on: $result")
}