Kotlin – Continuar con la Corutina después de la Excepción

Mi pregunta

¿Es posible continuar la ejecución de una corutina después de una exception?

Ejemplo

try { someMethod1() someMethod2() //Throws an exception! someMethod3() } catch(e: Exception) { //I do not want to call someMethod3 here! //I want the coroutine to resume after the exception inside of the original block. } finally { //I also do not want to call someMethod3 here! //I want the coroutine to resume after the exception inside of the original block. } 

No estoy seguro de si esto es posible, pero gracias de antemano por echar un vistazo!

La respuesta corta es que no es posible. La respuesta más larga es esta:

Las corotinas de Kotlin le permiten suspender la ejecución del código solo en los puntos de suspensión diseñados (usando funciones de suspensión). Las corutinas no son una construcción de control general similar a goto. Muy por el contrario, es un concepto de flujo de control muy bien limitado y estrictamente comprobado que garantiza que no se rompa la ilusión de ejecución secuencial del código, a pesar de que puede suspender la ejecución del código y reanudarlo más tarde.

Las corotines Kotlin implementan continuaciones one-shot y una vez que el bloque de código se suspende puede reanudarse solo una vez para continuar siguiendo la lógica de ejecución secuencial normal, por ejemplo, si el código arrojó una exception aún puede suspender la identificación, pero solo puede reanudarla continuar haciendo lo que estaba haciendo (manejando esta exception).

Para eso someMethod1 , someMethod2 y someMethod3 deben suspend fun . Entonces, todo lo que necesita es capturar la exception en el controller y reanudar la corutina.

  • El pact proveedorVerify no está recogiendo el file JSON Pact
  • RecyclerView - NullPointerException en .findViewById
  • ¿Por qué @Primary no funciona para las classs de Kotlin a veces?
  • Extraño error de "Val no se puede reasignar" al establecer una propiedad en Kotlin de un object Java
  • ¿Cómo puedo probar AsyncTask no llamado?
  • Obtener FragmentManager dentro de AndroidViewModel
  • Error al ejecutar un servlet de Apache Tomcat escrito en Kotlin
  • ¿Dónde intelliJ pone kotlin.js en un proyecto multiplataforma?
  • ¿Por qué el código que inicializa una propiedad de interfaz variable no se codificará en la compilation del bloque init?
  • RxJava BehaviorSubject no emite el último elemento?
  • Kotlin - ¿Cómo hacer onCompleteListener para get datos de Firestre?