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 deJobcare 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 cheiesuspendș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ă unJob. -
async: Pornește o nouă corutină fără a bloca firul curent și returnează unDeferred.
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")
}