Quali sono le classi principali in Kotlin Coroutines?
sobes.tech AI
Risposta dell'AI
Classi e concetti principali in Kotlin Coroutines:
-
CoroutineScope: Definisce il ciclo di vita delle coroutine lanciate al suo interno. Permette di cancellare tutte le coroutine figlie. -
Job: Rappresenta un handle a una coroutine. Permette di monitorarne lo stato, attendere la sua conclusione, cancellarla. -
Deferred: Un tipo speciale diJobche rappresenta un valore che sarà disponibile più tardi. Usato per calcoli asincroni che restituiscono un risultato. Il risultato si ottiene con la funzione.await(). -
Dispatcher: Definisce il thread o il pool di thread in cui viene eseguita la coroutine. I principali dispatcher:Dispatchers.Default: Ottimizzato per compiti intensivi in CPU. Usa un pool di thread condiviso.Dispatchers.IO: Ottimizzato per operazioni di I/O (rete, disco). Usa un numero appropriato di thread.Dispatchers.Main: Il thread principale dell'UI. Per aggiornare l'UI. Disponibile su piattaforme Android e altre con la dipendenza appropriata.Dispatchers.Unconfined: Avvia la coroutine nel thread corrente, ma la riprende in qualsiasi thread che riprende la funzione sospending.
-
Suspending function: Funzione contrassegnata con la parola chiavesuspendche può essere sospesa e ripresa più tardi. Può chiamare altre funzioni suspending. -
runBlocking: Blocca il thread corrente fino a quando tutte le coroutine nel suo ambito sono terminate. Usato principalmente per test e nel main. -
launch: Avvia una nuova coroutine senza bloccare il thread corrente e restituisce unJob. -
async: Avvia una nuova coroutine senza bloccare il thread corrente e restituisce unDeferred.
Esempio di utilizzo:
// Esempio di utilizzo di CoroutineScope, launch e Dispatchers.IO
import kotlinx.coroutines.*
fun main() = runBlocking {
// Creazione di CoroutineScope
val scope = CoroutineScope(Dispatchers.IO)
// Avvio di una coroutine nel dispatcher IO
val job: Job = scope.launch {
// Eseguire una richiesta di rete o altra operazione di I/O
delay(1000) // Simulazione di lavoro
println("Coroutine terminata in ${Thread.currentThread().name}")
}
// Attendere la fine della coroutine
job.join()
println("Funzione main terminata")
}
// Esempio di utilizzo di async e Deferred
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferredSum: Deferred<Int> = async {
delay(500)
1 + 1
}
// Attendere il risultato
val result = deferredSum.await()
println("Risultato è: $result")
}