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

172
Vistas
Lanzamiento de rutinas desde una función suspendida

Dado que tenemos una función de suspensión pero this no es un CoroutineScope , ¿cómo podemos lanzar otras corrutinas que estén asociadas con el alcance actual de lo que sea que ejecute esta función de suspending ?

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

0

Cada función suspendible tiene acceso a la variable global coroutineContext que puede envolver de manera trivial en CoroutineScope , pero ese no es el propósito previsto. Está allí para que pueda verificar en cualquier momento si su rutina fue cancelada, acceder a la información de depuración como el nombre del trabajo, etc.

En palabras de Roman Elizarov en su reciente publicación en Medium :

 suspend fun doNotDoThis() { CoroutineScope(coroutineContext).launch { println("I'm confused") } }

¡No hagas esto!

Una función suspendible no debe desencadenar un trabajo simultáneo que puede continuar después de su regreso. Solo debe usar la concurrencia para lograr la descomposición paralela de una tarea, y eso significa que esperará a que se completen todas las rutinas secundarias.

Debe decidir usar una función simple que sea el receptor de CoroutineScope (que indica la intención de iniciar un trabajo simultáneo) o usar una función suspendible que espera la finalización de todo el trabajo que inició.

Entonces, si desea una descomposición paralela, use un coroutineScope o, posiblemente, un bloque supervisorScope :

 coroutineScope { launch { // ... task to run in the background } // ... more work while the launched task runs in parallel } // All work done by the time we reach this line

coroutineScope es una función suspendible y no se completará hasta que se completen todas las rutinas que lanzó.

over 4 years ago · Santiago Trujillo Denunciar

0

Puede crear una función de extensión en CoroutineScope o una función con CoroutineScope como parámetro:

 fun CoroutineScope.doThis() { launch { ... } } fun doThatIn(scope: CoroutineScope) { scope.launch { ... } }

También puede usar coroutineScope o supervisorScope , según sus necesidades:

 suspend fun someFun() = coroutineScope { launch { ... } } suspend fun someFun() = supervisorScope { launch { ... } }
over 4 years ago · Santiago Trujillo Denunciar

0

Simplemente podría usar withContext() o coroutineScope() para iniciar otra rutina:

 withContext(coroutineContext) { launch { ... } }

Mientras que el segundo anularía el Job del contexto, pero reutilizaría el contexto:

 coroutineScope { 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