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

93
Vistas
¿GlobalScope.launch se ejecutará instantáneamente?

por ejemplo este fragmento de código:

 repeat(1000) { index -> GlobalScope.launch(MAIN) { println(index.toString()) } }

¿Es posible imprimir no ordenadamente como 0 1 3 2 4... ?

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

0

Primero, tenga en cuenta que muy probablemente NO debería usar GlobalScope en este caso. Solo está diseñado para lanzar rutinas que deberían seguir ejecutándose durante toda la vida útil de la aplicación.

Además, en esencia, cuando se lanzan bloques de código asíncronos como este, no debería importarle cuándo se ejecutan exactamente. El contrato es que se ejecutan simultáneamente con el resto del código (al menos hasta que te join() al Job devuelto, si lo haces). Si quisiera lanzar varias corrutinas simultáneas pero obtener algunos resultados en orden, entonces no tendría que preocuparse por el orden de ejecución de las corrutinas, sino solo por obtener el resultado de cada una en el lugar correcto. Para esto, podría usar map + async + awaitAll en lugar de launch .

En tercer lugar, si tiene puntos de suspensión (llamadas para suspender funciones) en sus rutinas, su ejecución se entrelazará, por lo que la noción de ejecutarse antes o después de otras rutinas se volverá borrosa.

Con eso en mente, respondamos la pregunta. El orden de ejecución (y el paralelismo) dependerá del despachador que proporcione en el contexto de la rutina.

  • Si se trata de Dispatchers.Main.immediate o Dispatchers.Unconfined de Android, ejecutará estas rutinas inmediatamente, es decir, en orden en este caso, ya que no tiene puntos de suspensión.

  • Si se trata de Dispatchers.Main de Android, que es de subproceso único, las corrutinas se "pondrán en cola" en el subproceso principal, pero es probable que aún se ejecuten en orden eventualmente en este caso. Sin embargo, no debe confiar en esto, ya que sería un detalle de implementación, no una garantía de API.

  • Con despachadores de subprocesos múltiples como Dispatchers.Default o Dispatchers.IO , las corrutinas se ejecutarán en paralelo sin garantías de orden.

  • GlobalScope por sí solo no tiene un despachador, por lo que si lanza corrutinas sin un contexto personalizado como GlobalScope.launch { ... } , se ejecutarán en Dispatchers.Default , que tiene varios subprocesos y podría ejecutar sus corrutinas en paralelo sin garantías de pedido.

  • GlobalScope.launch(MAIN) { ... } proporciona un contexto coroutine personalizado llamado MAIN . No sé qué se define en esta constante para ti. Si este contexto contiene un despachador, entonces el despachador decidirá como se mencionó anteriormente. De lo contrario, Dispatchers.Default se usará de forma predeterminada en el launch .

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