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.

  • Kotlin: cómo acceder a Attrs para una vista personalizada
  • Intentando crear un reciclador simple en Kotlin, pero el adaptador no se está aplicando correctamente
  • volver a habilitar la conversión de intellij java a kotlin
  • Operador as y ClassCastException
  • Kotlin y Gradle sin Maven Central?
  • Kotlin sorting array de una class basada en una var dentro de la class
  • Establecer el icono de desbordamiento de Fragment en pnetworkingeterminado
  • ¿Cómo dejar que un bloque kotlin vuelva a estar vacío?
  • Desarrollo de expresión lambda
  • Inserta el código del Método en una nueva class
  • Aplicación web Kotlin | enlace file css