Este ejemplo "falla":excepciones Try-Catch asíncronas
static async void Main(string[] args)
{
try
{
await TaskEx.Run(() => { throw new Exception("failure"); });
}
catch (Exception)
{
throw new Exception("success");
}
}
Es decir, la excepción con el texto "fracaso" se propaga hacia arriba.
Luego probé esta solución:
static async void Main(string[] args)
{
try
{
await SafeRun(() => { throw new Exception("failure"); });
}
catch (Exception)
{
throw new Exception("success");
}
}
static async Task SafeRun(Action action)
{
var ex = default(Exception);
await TaskEx.Run(() =>
{
try
{
action();
}
catch (Exception _)
{
ex = _;
}
});
if (ex != default(Exception))
throw ex;
}
Eso no ayudó tampoco.
Supongo que mi instalación de refresco Async CTP podría ser una manguera.
En caso de que este código funcione como espero ("éxito" aumenta, no "falla"), o no se "supone" que funciona de esa manera. Y si no, ¿cómo lo solucionarías?
Es a partir de una aplicación de consola para probar asincrónico, por lo que el método de nivel superior es el método principal en mi caso. –
@Bent he actualizado la respuesta para reflejar cómo está llamando, lo que puede o no ser un error, pero es causado por un punto de entrada 'async' que no se define como comportamiento –