我试图理解 .NET 4.0 中的 UnobservedTaskException 问题,所以我编写了以下代码
TaskScheduler.UnobservedTaskException += (sender, eventArgs) => Console.WriteLine("unobserved");
Task.Factory.StartNew(() => { throw new Exception(); }, TaskCreationOptions.LongRunning);
using (var autoResetEvent = new AutoResetEvent(false))
{
autoResetEvent.WaitOne(TimeSpan.FromSeconds(10));
}
Console.WriteLine("Collecting");
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine("Still working ");
Console.ReadKey();
Console.WriteLine("Still working ");
Console.WriteLine("Still working ");
Console.ReadKey();
UnobservedTaskException 被触发,然后我的应用程序继续工作。然而根据MSDN https://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler.unobservedtaskexception(v=vs.100).aspx该进程应该被终止。谁能告诉我为什么?
如果您在仅安装了 .Net 4.0 的计算机上运行此代码,它确实会崩溃。
由于自 4.0 以来的所有 .Net 版本都是就地更新,即使您将应用程序定位为 .Net 4.0,它也将在拥有 .Net 4.0 的计算机上的更高版本上运行。
要在更高版本上运行时获得与 .Net 4.0 相同的行为,您可以将其添加到您的 app.config 文件中(如TaskScheduler.UnobservedTaskException 事件 https://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler.unobservedtaskexception(v=vs.110).aspx):
<runtime>
<ThrowUnobservedTaskExceptions enabled="true"/>
</runtime>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)