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

312
Views
¿Cuándo usar la palabra clave de suspensión de Kotlin?
fun startAsyncFunc() { launch { asyncFunc1() asyncFunc2() } } fun asyncFunc1() { ... } suspend fun asyncFunc2() { ... }

Puedo terminar el trabajo sin suspend e incluso hace que la prueba sea más fácil (se puede probar sin agregar runBlocking .

Mis preguntas:

  1. asyncFunc1 vs asyncFunc2 , ¿cuál es mejor y por qué?
  2. Si asyncFunc2 es mejor, ¿debería usar siempre suspend cada vez que se ejecute una función en las rutinas?

Actualizar

En los lanzamientos recientes de Coroutines de Kotlin, observo que si un método no contiene ningún código de rutinas (como launch , async , etc.), el compilador se queja. This inspection reports a suspend modifier as redundant if no other suspend functions are called inside . Así que asumo que suspend solo debe usarse cuando es imprescindible.

Actualizar2

Un consejo de Google

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Solo debe declarar su función suspend si es necesario. Diría que, ante la duda, si el compilador no te obliga, no uses suspend .

La mayoría de las veces, si tiene una buena razón para que su función se suspenda, significa que está haciendo algo que probablemente requiera que llame a funciones de suspensión como withContext de todos modos, o podría ser una función basada en devolución de llamada que expone como suspensión a través suspendCoroutine / suspendCancellableCoroutine . De cualquier manera, llamar a esas funciones lo obligaría a declarar su propia función suspend .

Tenga en cuenta que declarar una función suspend no permite que las personas que llaman hagan nada más de lo que podían hacer cuando su función no estaba suspendida. En todo caso, está limitando el uso de su función.

Una posible excepción a la regla "no lo use a menos que sea forzado" sería si está definiendo esta función como un método abierto (por ejemplo, en una interfaz) y espera que algunas implementaciones/anulaciones necesiten llamar a funciones de suspensión ellos mismos.

over 4 years ago · Santiago Trujillo Report

0

La palabra clave suspend significa que la rutina se puede suspender para su ejecución posterior.

Habiendo dicho eso, debe usarlo conscientemente para corrutinas que se suspenderán (por ejemplo, su asyncFunc2() hizo una llamada HTTP y está esperando respuesta para procesarlo)

Asi que.

  1. Use suspend para funciones que se retrasarán de alguna manera (en espera de algunos cálculos, respuesta de API, etc.)
  2. suspend fun solo se puede ejecutar desde coroutine. Entonces, si se suspende, bloqueará la rutina. Elimine la palabra clave de suspend , pero ejecútela en la rutina y tendrá el mismo efecto. Sin embargo, si ejecuta esta función desde fuera de la rutina, bloqueará el subproceso en el que se estaba ejecutando.

Al probar rutinas, siempre debe invocar runBlocking . Si no lo hace, es posible que no se complete una rutina que se suspenda, lo que resultará en una prueba fallida.

over 4 years ago · Santiago Trujillo Report

0

Use la palabra clave suspender para:

  • funciones que se retrasarán de alguna manera (en espera de algunos cálculos, solicitudes de red)

    • cada vez que la función llama a otras funciones de suspensión
    • función que llama a withContext() – withContext() es una función de suspensión que proviene de la biblioteca Coroutine

La regla general es no marcar una función suspendida a menos que se vea obligado a hacerlo.

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!