Kādas ir galvenās klases Kotlin Coroutines?
sobes.tech AI
Atbilde no AI
Galvenās klases un koncepcijas Kotlin Coroutines:
-
CoroutineScope: Nosaka korutīnu dzīves ciklu, kas tiek uzsākts tās iekšienē. Ļauj pārtraukt visas bērnu korutīnas. -
Job: Attēlo atsauci uz korutīnu. Ļauj sekot tās stāvoklim, gaidīt tās pabeigšanu, pārtraukt. -
Deferred: ĪpašsJobtips, kas attēlo vērtību, kas būs pieejama vēlāk. Izmanto asenhronām aprēķiniem, kas atgriež rezultātu. Rezultātu var iegūt ar.await()funkciju. -
Dispatcher: Nosaka pavedienu vai pavedienu baseinu, kurā tiek izpildīta korutīna. Galvenie dispečeri:Dispatchers.Default: Optimizēts CPU-intensīvām uzdevumiem. Izmanto kopēju pavedienu baseinu.Dispatchers.IO: Optimizēts I/O operācijām (tīkls, disks). Izmanto atbilstošu pavedienu skaitu.Dispatchers.Main: Galvenais UI pavedienu. Lai atjauninātu UI. Pieejams Android un citās platformās ar atbilstošu atkarību.Dispatchers.Unconfined: Sāk korutīnu pašreizējā pavedienā, bet to atsāk jebkurā pavedienā, kas atsāka suspending-funkciju.
-
Suspending function: Funkcija, kas ir atzīmēta arsuspendvārdu un var tikt pārtraukta un atsākta vēlāk. Var izsaukt citas suspending-funkcijas. -
runBlocking: Bloķē pašreizējo pavedienu līdz visām korutīnām ir pabeigtas. Galvenokārt izmanto testēšanai unmainfunkcijās. -
launch: Sāk jaunu korutīnu bez pašreizējā pavediena bloķēšanas un atgriežJob. -
async: Sāk jaunu korutīnu bez pašreizējā pavediena bloķēšanas un atgriežDeferred.
Piemēri:
// Piemērs, izmantojot CoroutineScope, launch un Dispatchers.IO
import kotlinx.coroutines.*
fun main() = runBlocking {
// Izveidot CoroutineScope
val scope = CoroutineScope(Dispatchers.IO)
// Sākt korutīnu IO dispečerī
val job: Job = scope.launch {
// Veikt tīkla pieprasījumu vai citu I/O operāciju
delay(1000) // Imitē darbu
println("Korutīna pabeidzās ${Thread.currentThread().name}")
}
// Gaidīt korutīnas pabeigšanu
job.join()
println("Galvenā funkcija pabeidzās")
}
// Piemērs, izmantojot async un Deferred
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferredSum: Deferred<Int> = async {
delay(500)
1 + 1
}
// Gaidīt rezultātu
val result = deferredSum.await()
println("Rezultāts ir: $result")
}