Tengo una idea de por qué, pero me gustaría preguntar si alguien tiene una buena idea de por qué la excepción que se genera dentro de un hilo nunca es atrapada por el código que la inició. Aquí hay un código muy simple para demostrar lo que quiero decir:Try/Catch and threading
using System;
using System.Collections.Generic;
using System.Threading;
namespace TestCrash
{
class Program
{
private static void Crash(object control)
{
AutoResetEvent are = (AutoResetEvent)(((object[])control)[0]);
are.Set();
throw new Exception("Burn baby burn");
}
static void Main(string[] args)
{
try
{
List<WaitHandle> waitHandles = new List<WaitHandle>();
for (int i = 0; i < 100; i++)
{
AutoResetEvent are = new AutoResetEvent(false);
waitHandles.Add(are);
object[] procControl = new object[] { are };
ThreadPool.QueueUserWorkItem(Crash, procControl);
WaitHandle.WaitAll(waitHandles.ToArray());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
ingenuamente pensé que al tener el try/catch estaría a salvo, pero me pareció que el camino difícil que no es el caso (es estrellarse uno de mis servicios).
Extraño, estaba a punto de comenzar un hilo similar en este momento. –
Estoy seguro de que las Excepciones brillaron hasta el hilo de llamada. Aunque no estoy usando ThreadPool. solo Subproceso T = subproceso nuevo (nuevo ThreadStart (delegado() {Console.WriteLine ("Crash!"); DoCrashyThingy();})); T.Start(); – Fusspawn
Podría fácilmente estar equivocado al respecto, la mayor parte de mi trabajo es este horrible gigante de un solo hilo .. – Fusspawn