Soy consciente de cómo se procesan las excepciones sin mano cuando se usa Task
s, solo lanzando un no controlado en el finalizador si el código de usuario no lo ha "observado" todavía.Por qué una excepción no controlada en el subproceso del temporizador no bloquea el proceso
También conozco cómo una excepción no controlada en un subproceso asincrónico (por ejemplo, Action.BeginInvoke()
) se captura y se vuelve a lanzar en la llamada de unión (por ejemplo, Action.EndInvoke()
).
Lo que no entiendo es cómo esto no bloquea el proceso?
static void Main(string[] args)
{
var timer = new System.Timers.Timer() {Interval = 100};
timer.Elapsed += (o, e) => { throw new Exception(); };
timer.Start();
Console.ReadKey(true);
}
Bueno, esto fue 4-6 horas de mi vida que nunca volveré. Qué decisión tan horrible por parte de Microsoft no se colgó. –