Kiedy aplikacja AppDomain.ProcessExit nie zostanie wywołana?
Włączanie linii//1
poniżej spowoduje awarię programu bez drukowania „proc exit”, ale w przypadku linii//2
, „proc exit” zostanie wydrukowane. „nieobsługiwane” btw zostanie wydrukowane w obu przypadkach.
Dlaczego różnica i jakie są reguły? Oczywiście zabijanie aplikacji przy użyciu np. Menedżer zadań uniemożliwi wydrukowanie „proc exit”, ale poza tym, w jakich przypadkach nie zostanie wydrukowany?
static void Main(string[] args)
{
Thread.GetDomain().UnhandledException +=
(sender, eventArgs) => Console.WriteLine("unhandled");
AppDomain.CurrentDomain.ProcessExit +=
(sender, eventArgs) => Console.WriteLine("proc exit");
//1 new Thread(_ => { throw new Exception(); }).Start();
//2 ThreadPool.QueueUserWorkItem(_ => { throw new Exception(); });
Thread.Sleep(1000);
return;