Introduzione a Coroutine in Kotlin
Una Coroutine è un thread di esecuzione leggero che può essere sospeso e ripreso in seguito. Ci sono già molti articoli o argomenti che trattano questo argomento, ma questo post è diverso, è semplice e può farti iniziare più facilmente. Coprirà le seguenti parti:
Panoramica
Come molti altri linguaggi di programmazione come JS, Python, Coroutine è una funzionalità fornita da Kotlin che ci consente di eseguire attività lunghe e dispendiose in termini di tempo. In breve:
In Kotlin, le Coroutine sono un modo per scrivere codice asincrono e non bloccante in un modo più sequenziale e di facile lettura.
In effetti, niente nuove tecniche qui. Possiamo trattare Kotlin Coroutine come un framework/libreria che incapsula alcuni usi comuni durante la gestione dell'asincronizzazione.
Semplici esempi di utilizzo delle coroutine in Kotlin
Per utilizzare le coroutine in Kotlin, devi includere la kotlinx-coroutines-corelibreria nel tuo progetto. Nel file gradle dell'app (c'è solo un file gradle sotto il progetto IntelliJ o scegli il file gradle per l'app se si tratta di un progetto Android), aggiungi la seguente riga:
dependencies {
testImplementation(kotlin("test-junit"))
implementation(kotlin("stdlib-jdk8"))
// add coroutine dependency
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2")
}
1. Utilizzare launchper creare coroutine
Ecco un esempio di utilizzo di una coroutine per eseguire un'attività di lunga durata in background:
import kotlinx.coroutines.*
fun main() {
// Start a coroutine using the launch function
val job = GlobalScope.launch {
// Perform a long-running task in the background
delay(1000L)
println("Hello, world!")
}
// Wait for the coroutine to finish
runBlocking {
job.join()
}
}
2. Utilizzare asyncper creare coroutine
Ecco un esempio dell'utilizzo delle coroutine in Kotlin per eseguire più attività in parallelo e quindi attendere che tutte finiscano:
import kotlinx.coroutines.*
fun main() {
// Start two coroutines using the async function
val job1 = GlobalScope.async {
// Perform a long-running task in the background
delay(1000L)
println("Task 1")
}
val job2 = GlobalScope.async {
// Perform a different long-running task in the background
delay(2000L)
println("Task 2")
}
// Wait for both coroutines to finish
runBlocking {
job1.await()
job2.await()
}
}
La differenza tra launch e async per avviare una coroutine
Entrambi sono comunemente usati per avviare una coroutine. La principale differenza tra i due è che launchrestituisce un Job (futuro cancellabile non bloccante) e non restituisce risultato, mentre asyncrestituisce un Deferred (futuro cancellabile non bloccante con risultato) che può essere utilizzato per ottenere il risultato di la coroutine. Considerando la differenza, quando è necessario utilizzare launch e async per creare le coroutine:
- Quando usi
launchla funzione, la coroutine verrà eseguita in background e la chiamata alla funzione tornerà immediatamente. Viene utilizzato quando il risultato della coroutine non è necessario. - Quando usi
asyncla funzione, anche la coroutine verrà eseguita in background e la chiamata alla funzione tornerà immediatamente, ma restituirà unDeferredoggetto su cui puoi chiamare la funzione .await() per ottenere il risultato della coroutine. Viene utilizzato quando è necessario il risultato della coroutine. Per esempio:
val result = GlobalScope.async {
return@async URL("https://api.example.com/data").readText()
}
val data = result.await()
println(data)
// output: {"fact":"A group of cats is called a \u201cclowder.\u201d","length":38}
Cosa c'è di più da qui? Come sappiamo, Coroutine è un argomento importante e poche persone possono spiegarlo tutto. Questo è il primo articolo della serie Coroutine. Se sei interessato, iscriviti per altri prossimi post su questo:
- Non bloccante in Kotlin Coroutines (In arrivo questa settimana)
- Avvia e sospendi una Coroutine a Kotlin (in arrivo questa settimana)
Originariamente pubblicato su https://needone.app il 16 gennaio 2023.

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































