Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 抛出异常(无等待,无异常访问)的任务是否会使程序崩溃?_C#_.net_Exception_Task Parallel Library - Fatal编程技术网

C# 抛出异常(无等待,无异常访问)的任务是否会使程序崩溃?

C# 抛出异常(无等待,无异常访问)的任务是否会使程序崩溃?,c#,.net,exception,task-parallel-library,C#,.net,Exception,Task Parallel Library,在framework 4.0下运行时,以下程序真的崩溃了吗?当它在4.5或更高版本下运行时,它与不一致,尽管它似乎没有更新,并且仍然表示代码应该抛出(“根据.NET异常策略升级异常”) 我问这个问题的原因是,在我的实际应用程序中,我有许多任务可能会抛出异常以表示失败,而实际上从未等待。我们仍然部署在Windows XP机器上(不要问),我们没有收到来自这些机器的错误报告,但由于问题与垃圾收集有关,只有当程序运行很长时间或需要从其他地方获得更多内存时,才会出现异常 (为了完整性,设计是将任务记录并

在framework 4.0下运行时,以下程序真的崩溃了吗?当它在4.5或更高版本下运行时,它与不一致,尽管它似乎没有更新,并且仍然表示代码应该抛出(“根据.NET异常策略升级异常”)

我问这个问题的原因是,在我的实际应用程序中,我有许多任务可能会抛出异常以表示失败,而实际上从未等待。我们仍然部署在Windows XP机器上(不要问),我们没有收到来自这些机器的错误报告,但由于问题与垃圾收集有关,只有当程序运行很长时间或需要从其他地方获得更多内存时,才会出现异常

(为了完整性,设计是将任务记录并在本地清理,然后为了失败而重新抛出,这一点可以通过继续来识别。)基于同样的原因,激发了框架的4.0和4.5版本之间的行为变化,这是Stephen Toub在中讨论的,我很难等待(或访问例外属性)所有可能抛出的任务。(我忍不住将其视为一个神学难题——如果有一个恶魔声称所有罪人的灵魂,谁最终将声称他的灵魂?“谁开始了第一个计划?”)

在VS 2013中运行时的示例输出,根据框架4.6.1编译(可能运行):

Task executing, now going to throw ...
~TaskWithDtor executing
编辑:正如i3arnon在评论中提供的链接所建议的,我包含了元素

<runtime> 
      <ThrowUnobservedTaskExceptions enabled="true"/> 
</runtime> 


在我的应用程序的app.config中,但它没有改变行为(即程序在4.5或更高版本下运行时不会引发异常——我实际上安装了框架版本4.6.1)。我缺少什么?

你在问什么?@i3arnon我文章的第一句话是“在framework 4.0下运行时,以下程序真的崩溃了吗?”。在更高版本下运行时不会崩溃,但我无法验证4.0下的行为。那么,是的(如果有足够的时间)。您可以使用
通过wUnobservedTaskExceptions
标志重新启用该行为。@i3arnon因为您来自MS,这也是我第一次遇到MSDN文档,它事实上是错误的,这就是为什么我不确定一切。@i3arnon和关于该标志:我读过它,不知道放在哪里。我的program有一个app.config,它有一个根元素,但是这个标志没有作用(它不应该在框架的全局配置文件中吗?)。你在问什么?@i3arnon我文章的第一句话是“在框架4.0下运行时,下面的程序真的崩溃了吗?”?“。在更高版本下运行时不会,但我无法验证4.0下的行为。那么,是的(如果有足够的时间)。您可以使用
通过wUnobservedTaskExceptions
标志重新启用该行为。@i3arnon因为您来自MS,这也是我第一次遇到MSDN文档,它事实上是错误的,这就是为什么我不确定一切。@i3arnon和关于该标志:我读过它,不知道放在哪里。我的program有一个app.config,它有一个根元素,但是这个标志在那里没有作用(它不应该在框架的全局配置文件中的某个地方吗?)。
<runtime> 
      <ThrowUnobservedTaskExceptions enabled="true"/> 
</runtime>