c# - cómo arreglar "System.AggregateException" en mscorlib.dll "
.net (4)
Recibo tal problema en el depurador y el programa deja de ejecutar. El depurador no me muestra la línea, así que no sé qué arreglar.
Se produjo una excepción no controlada del tipo ''System.AggregateException'' en mscorlib.dll
Información adicional: la (s) excepción (es) de una Tarea no se observaron al Esperar en la Tarea o al acceder a su propiedad de Excepción. Como resultado, la excepción no observada se volvió a lanzar por el hilo del finalizador.
No se puede obtener el valor de local o argument '''' ya que no está disponible en este puntero de instrucción, posiblemente porque se ha optimizado. System.Threading.Tasks.TaskExceptionHolder
¿Cómo solucionar mi problema?
También encontré esta pregunta, que es bastante similar. No se puede obtener el valor de local o argumento, ya que no está disponible en este puntero de instrucción, posiblemente porque se ha optimizado
Como dice el mensaje, tienes una tarea que lanzó una excepción no controlada.
Active Break on All Exceptions (Debug, Exceptions) y vuelva a ejecutar el programa.
Esto le mostrará la excepción original cuando fue lanzado en primer lugar.
(comentario adjunto): En VS2015 (o superior). Seleccione Depurar> Opciones> Depuración> General y anule la selección de la opción "Habilitar mi código".
En mi caso, me encontré con este problema mientras usaba Edge.js: todo el problema era un error de sintaxis de JavaScript dentro de una definición de función de C # Edge.js.
La respuesta aceptada funcionará si puede reproducir fácilmente el problema. Sin embargo, como una cuestión de mejores prácticas, debería detectar cualquier excepción (y registro) que se ejecuten dentro de una tarea. De lo contrario, su aplicación se bloqueará si ocurre algo inesperado dentro de la tarea.
Task.Factory.StartNew(x=>
throw new Exception("I didn''t account for this");
)
Sin embargo, si hacemos esto, al menos la aplicación no falla.
Task.Factory.StartNew(x=>
try {
throw new Exception("I didn''t account for this");
}
catch(Exception ex) {
//Log ex
}
)
Podría manejar la excepción directamente para que no bloquee su programa (atrapando la excepción AggregateException
). También puede consultar la Excepción interna, esto le dará una explicación más detallada de lo que salió mal:
try {
// your code
} catch (AggregateException e) {
}