[英]TaskScheduler.UnobservedTaskException event handler never being triggered
[英]Why is the UnobservedTaskException event handler not triggered for a Task which throws an exception?
我有以下性能测试,其设置然而从不执行所述OnTaskException方法UnobservedTaskException。 有任何想法吗?
注意 :
如果我删除“ for loop ”,那么一切都会按预期进行。
static void Main()
{
SetupUnobservedTaskExceptionHandling();
Task.Factory.StartNew(() =>
{
var counter = 5;
for (; counter > 0; counter--)
{
Console.WriteLine(counter);
Thread.Sleep(1000);
}
throw new InvalidCastException("I threw up!");
});
GC.Collect();
GC.WaitForPendingFinalizers();
Console.ReadLine();
}
private static void SetupUnobservedTaskExceptionHandling()
{
TaskScheduler.UnobservedTaskException += OnTaskException;
}
private static void OnTaskException(object sender, UnobservedTaskExceptionEventArgs e)
{
Console.WriteLine("Error!" + e.Exception);
e.SetObserved();
}
您不等待任务完成执行。 这意味着您的应用程序将在任务引发异常之前结束。
如果仅添加一个Thread.Sleep
并让任务抛出异常,则将通知您:
private static void Main()
{
SetupUnobservedTaskExceptionHandling();
Task.Factory.StartNew(() =>
{
var counter = 5;
for (; counter > 0; counter--)
{
Console.WriteLine(counter);
Thread.Sleep(1000);
}
throw new InvalidCastException("I threw up!");
});
Thread.Sleep(10000);
GC.Collect();
GC.WaitForPendingFinalizers();
Console.ReadLine();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.