Sobes.tech
Junior

¿Cómo ejecutar código sincrónico y obtener su resultado?

sobes.tech AI

Respuesta de la IA

Se puede usar una llamada bloqueante en un hilo separado, por ejemplo, mediante Thread o AsyncTask (aunque este último está obsoleto).

// Ejemplo con Thread
fun performBlockingOperation(): String {
    // Simulación de una operación larga
    Thread.sleep(2000)
    return "Resultado de la operación sincrónica"
}

fun runSynchronousCode() {
    // Crear un nuevo hilo
    val thread = Thread {
        try {
            val result = performBlockingOperation()
            // El resultado se puede devolver al hilo principal
            // mediante Handler o runOnUiThread
            println("Resultado obtenido: $result")
        } catch (e: Exception) {
            println("Error: ${e.message}")
        }
    }
    // Iniciar el hilo
    thread.start()

    // Si se necesita obtener el resultado en el hilo UI
    // Handler(Looper.getMainLooper()).post {
    //    // Actualizar UI
    // }
}

Un enfoque moderno alternativo es usar corrutinas con despachadores bloqueantes (aunque esto puede no ser la mejor opción para el hilo UI).

import kotlinx.coroutines.*

suspend fun performBlockingCoroutineOperation(): String {
    // Simulación de una operación larga
    delay(2000)
    return "Resultado de la operación sincrónica en la corrutina"
}

fun runBlockingCoroutine() {
    // Ejecutar una corrutina bloqueante
    runBlocking {
        try {
            val result = performBlockingCoroutineOperation()
            println("Resultado obtenido de la corrutina: $result")
        } catch (e: Exception) {
            println("Error en la corrutina: ${e.message}")
        }
    }
}

Es importante evitar llamadas bloqueantes en el hilo principal de la UI (Main Thread) para prevenir ANR (Aplicación no responde).