Sobes.tech
Middle

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šs Job tips, 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 ar suspend vā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 un main funkcijā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")
}