Esta nota es una continuación de una anterior qué nos habla de algunas propuestas de la actualización para el lenguaje C. Esto te permite ver porque es importante tomar un curso de C#.
Cuando se usa el modo diferido, la propiedad Exception.LastException se puede usar para determinar si se ha producido un error. Esto almacena solo el error más reciente, por lo que si se producen varios errores, todos menos el último se perderán.
Esto ha causado cierta preocupación, ya que significaría que uno debe verificar LastException después de cada línea, lo que sería contrario al objetivo de reducir la cantidad de código necesario.
Para abordar esto, se está considerando una enmienda a la propuesta para reemplazar LastException con una pila. Esto permitiría al desarrollador ver todas las excepciones que se lanzaron en orden cronológico inverso.
Otra opción que se está considerando es la capacidad de especificar un objetivo de salto.
#exception mode deferred error_handler [...] return; error_handler: //log error #exception resume next
Si se omite el modificador "siguiente", la aplicación volverá a intentar la declaración fallida en lugar de continuar en la siguiente línea.
El uso de manejo de errores estructurado y diferido en la misma función puede ser problemático desde el punto de vista del compilador. El modo diferido cambia fundamentalmente la forma en que se compila el código, al igual que C# implementa cierres y asíncrono / espera sin soporte de CLR. Para simplificar los cambios necesarios para el compilador, se está considerando otra sintaxis. Esto usaría el mismo tipo de sintaxis que vemos con bloques inseguros y controlados.
deferred { DownloadFiles(); ParseAndConvertFiles(); ImportFiles(); }
Debido a la magnitud del cambio, es poco probable que esta propuesta sea adoptada antes de C# 9. Sin embargo, las actualizaciones que tiene la versión 8 son interesantes. Estaremos hablando en una nota siguiente sobre algunas de estas. Mientras tanto puedes ver nuestros enlaces de los cursos siguientes.
Curso de Excel
curso de Kotlin