Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

355
Vistas
kotlin coroutine: ¿cómo garantizar que algunos comandos se ejecuten en el subproceso principal de la interfaz de usuario cuando se invocan dentro de coroutine?

Tengo una rutina muy simple que solo retrasa un poco y luego lo que quiero que haga es enviar comandos a la cola de mensajes de la interfaz de usuario. así que ejecute las dos últimas líneas en el subproceso de la interfaz de usuario. aquí está la rutina:

 async{ delay(5000) doSomething() doAnotherThing() }

Quiero que los dos últimos métodos doSomething() y doAnotherThing() se ejecuten en el subproceso de la interfaz de usuario. ¿Cómo se puede hacer esto? Por lo que he leído, el retraso (5000) se ejecutará automáticamente de forma asíncrona, pero ¿cómo hacer que el resto se ejecute en el subproceso de la interfaz de usuario? Para ser muy claro, estoy haciendo esto desde un objeto que se lanzó desde el hilo principal.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

async crea una corrutina y se ejecuta en el contexto Coroutine, heredado de un CoroutineScope , se pueden especificar elementos de contexto adicionales con un argumento de contexto. Si el contexto no tiene ningún despachador ni ningún otro ContinuationInterceptor , entonces se usa Dispatchers.Default .

Si se utiliza Dispatchers.Default , cualquier función que invoque en el generador async se ejecutará de forma asíncrona. Para cambiar de contexto, puede usar la función withContext :

 async { delay(5000) withContext(Dispatchers.Main) { // if we use `Dispatchers.Main` as a coroutine context next two lines will be executed on UI thread. doSomething() doAnotherThing() } }

Si async se ejecuta en el contexto Dispatchers.Main , no necesita cambiar de contexto:

 var job: Job = Job() var scope = CoroutineScope(Dispatchers.Main + job) scope.async { delay(5000) // suspends the coroutine without blocking UI thread // runs on UI thread doSomething() doAnotherThing() }

Nota : async se usa principalmente para ejecuciones paralelas. Para comenzar, se utiliza un generador de launch de corrutina simple. Entonces puede reemplazar todas las funciones async en esos ejemplos en la función de launch . Además, para ejecutar la rutina con el generador async , debe llamar a la función await await() en el objeto Deferred que devuelve la función async . Aquí hay información adicional .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda