我试图弄清楚为什么我的控制台应用程序没有被未处理的任务异常拆除.我所做的只是创建一个任务,我立即抛出异常.最后我强迫GC.在第一个例子中,我有一个TaskScheduler.UnobservedTaskException事件的处理程序,我可以看到异常得到处理.
static async Task ThrowsException()
{
Console.WriteLine("Throwing!");
throw new Exception("Test exception");
}
static void Main(string[] args)
{
TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
ThrowsException();
Console.WriteLine("Collecting garbage.");
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine("Done collecting garbage.");
Console.ReadKey();
}
static void TaskScheduler_UnobservedTaskException(object sender,
UnobservedTaskExceptionEventArgs e)
{
Console.WriteLine("Unobserved task exception occured in finalizer.");
Console.WriteLine(e.Exception.InnerException.Message);
}
Run Code Online (Sandbox Code Playgroud)
输出:
Throwing!
Collecting garbage.
Unobserved task exception occured in finalizer.
Test exception
Done collecting garbage.
Run Code Online (Sandbox Code Playgroud)
但如果我注释掉该行TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException,程序仍然会运行完成.在这种情况下,输出是:
Throwing!
Collecting garbage.
Done collecting garbage.
Run Code Online (Sandbox Code Playgroud)
为什么应用程序在这种情况下不会崩溃?