Sobes.tech
Middle

Care sunt principalele clase în Kotlin Coroutines?

sobes.tech AI

Răspuns de la AI

Clase și concepte principale în Kotlin Coroutines:

  • CoroutineScope: Definește ciclul de viață al corutinelor lansate în interiorul său. Permite anularea tuturor corutinelor copil.

  • Job: Reprezintă un handle către o corutină. Permite urmărirea stării sale, așteptarea finalizării, anularea.

  • Deferred: Un tip special de Job care reprezintă o valoare care va fi disponibilă mai târziu. Folosit pentru calcule asincrone care returnează un rezultat. Rezultatul poate fi obținut cu funcția .await().

  • Dispatcher: Definește firul sau grupul de fire în care se execută corutina. Principalii dispatcher-i:

    • Dispatchers.Default: Optimizat pentru sarcini intensive în CPU. Folosește un pool comun de fire.
    • Dispatchers.IO: Optimizat pentru operații de I/O (rețea, disc). Folosește un număr adecvat de fire.
    • Dispatchers.Main: Firul principal UI. Pentru actualizarea UI. Disponibil pe platforme Android și altele cu dependența corespunzătoare.
    • Dispatchers.Unconfined: Pornește corutina în firul curent, dar o reîncepe în orice fir care reîncepe funcția suspending.
  • Suspending function: Funcție marcată cu cuvântul cheie suspend și care poate fi suspendată și reluată mai târziu. Poate apela alte funcții suspending.

  • runBlocking: Blochează firul curent până când toate corutinele din domeniul său au fost finalizate. Folosit în principal pentru teste și în funcția main.

  • launch: Pornește o nouă corutină fără a bloca firul curent și returnează un Job.

  • async: Pornește o nouă corutină fără a bloca firul curent și returnează un Deferred.

Exemplu de utilizare:

// Exemplu de utilizare a CoroutineScope, launch și Dispatchers.IO
import kotlinx.coroutines.*

fun main() = runBlocking {
    // Crearea unui CoroutineScope
    val scope = CoroutineScope(Dispatchers.IO)

    // Lansarea unei corutine în dispatcher-ul IO
    val job: Job = scope.launch {
        // Executarea unei cereri de rețea sau altă operație de I/O
        delay(1000) // Simulare de lucru
        println("Corutina s-a terminat în ${Thread.currentThread().name}")
    }

    // Așteptarea finalizării corutinei
    job.join()
    println("Funcția main s-a terminat")
}
// Exemplu de utilizare a async și Deferred
import kotlinx.coroutines.*

fun main() = runBlocking {
    val deferredSum: Deferred<Int> = async {
        delay(500)
        1 + 1
    }

    // Așteptarea rezultatului
    val result = deferredSum.await()
    println("Rezultatul este: $result")
}