Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

169
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!