Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

170
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda