try practices practice handling example errores ejemplo custom create como catch capturar best c# exception asynchronous exception-handling async-await

practices - throw exception c#



Capturando una excepción en un método asíncrono (1)

En primer lugar, se maneja su excepción. Creo que está viendo que el código detiene la ejecución y muestra el error porque tiene Break When Thrown para excepciones. Verifique su ventana de excepción ( Debug -> Windows -> Exception Settings ).

Cuando utilizas un tipo de retorno de void en un método async , no tienes la capacidad de obtener ningún tipo de información del método: es fuego y olvídate. Excepto en situaciones específicas, esta es una mala práctica. Siempre haz que tus métodos asíncronos devuelvan una Task o Task<T> :

private static async Task TestAsyncException()

Ahora, tu método principal puede escuchar la tarea:

static void Main(string[] args) { TestAsyncException().Wait(); // or whatever you want to do with the task Console.Read(); }

Normalmente, puede usar await para desplegar la tarea aquí, pero eso no está permitido en el punto de entrada de la aplicación.

Estoy tratando de familiarizarme con la programación async / await y el manejo de excepciones.

static void Main(string[] args) { TestAsyncException(); } private static async void TestAsyncException() { try { var result = await Task.Factory.StartNew(() => DoSomething()); //do something with the result } catch (Exception e) { Console.WriteLine(e.Message); } } private static int DoSomething() { throw new Exception("Exception was thrown!"); }

Espero que la Exception se maneje correctamente, pero en su lugar la ejecución del código se detiene y obtengo

Se produjo una excepción de tipo ''System.Exception'' en .. pero no se manejó en el código de usuario.

Pero luego, cuando continúo ejecutando el código, la Exception realmente queda atrapada (y el mensaje se muestra en la Console ).

¿Cómo se supone que atrape la Exception sin interrumpir la ejecución de mi código?