1. Crear una coroutine básica: Una coroutine simple se puede crear utilizando la función launch
de la biblioteca kotlinx.coroutines
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import kotlinx.coroutines.* fun main() { // Crear una coroutine val job = GlobalScope.launch { delay(1000) println("¡Hola, mundo!") } // Esperar a que la coroutine termine runBlocking { job.join() } } |
2. Manejar tareas asincrónicas: Las coroutines son ideales para tareas asincrónicas, como llamadas de red. Aquí hay un ejemplo con async
y await
:
1 2 3 4 5 6 7 8 9 10 11 12 |
import kotlinx.coroutines.* import java.net.URL suspend fun fetchURL(url: String): String = withContext(Dispatchers.IO) { URL(url).readText() } fun main() = runBlocking { val deferred = async { fetchURL("https://www.example.com") } val result = deferred.await() println("Contenido de la URL: $result") } |
3. Manejar excepciones: Puedes usar bloques try-catch
en coroutines para manejar excepciones de manera similar a la programación síncrona.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import kotlinx.coroutines.* fun main() = runBlocking { val job = GlobalScope.launch { try { val result = 1 / 0 // Generar una excepción println("Resultado: $result") } catch (e: ArithmeticException) { println("Error aritmético: ${e.message}") } } job.join() } |
4. Coroutines en Android: En Android, las coroutines son útiles para realizar operaciones en segundo plano. Aquí hay un ejemplo simple en una actividad de Android:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import kotlinx.coroutines.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) GlobalScope.launch(Dispatchers.IO) { val result = fetchRemoteData() // Función que realiza una solicitud de red withContext(Dispatchers.Main) { updateUI(result) } } } private suspend fun fetchRemoteData(): String { delay(1000) // Simulando una solicitud de red return "Datos remotos obtenidos" } private fun updateUI(data: String) { // Actualizar la interfaz de usuario con los datos } } |
5. Uso de channels: Los canales son una forma de comunicarse entre coroutines. Puedes usarlos para transmitir datos de una coroutine a otra.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import kotlinx.coroutines.* import kotlinx.coroutines.channels.* fun main() = runBlocking { val channel = Channel<Int>() val producer = launch { for (x in 1..5) { channel.send(x) } channel.close() } val consumer = launch { for (element in channel) { println("Recibido: $element") } } producer.join() consumer.join() } |