问题标签 [unobserved-exception]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
16073 浏览

.net - 使用任务并行库时如何处理所有未处理的异常?

我在 .NET 4.0 中使用 TPL(任务并行库)。我想通过使用Thread.GetDomain().UnhandledException事件来集中所有未处理异常的处理逻辑。但是,在我的应用程序中,从不会为以 TPL 代码启动的线程触发该事件,例如Task.Factory.StartNew(...). 如果我使用类似new Thread(threadStart).Start().

这篇 MSDN 文章建议在使用 TPL 时使用 Task.Wait() 来捕捉AggregateException,但这不是我想要的,因为这种机制不够“集中”。

有没有人遇到过同样的问题,还是只有我一个人?你有什么解决办法吗?

0 投票
6 回答
2452 浏览

c# - 如何使用 TPL 引发 AggregateException?

我正在尝试重新创建将导致此异常的条件:

我写了这个程序,以为我会导致异常,但它没有:

在我的实际应用程序中,我使用了 TPL,但我没有正确编写异常处理代码。结果我得到了那个例外。现在我试图在一个单独的程序中重新创建相同的条件来试验未观察到的异常。

0 投票
1 回答
1699 浏览

c#-4.0 - 处理未观察到的任务异常

我知道UnobservedTaskException当终结器在对象上运行时,我可以处理以防止任何未观察到的异常终止我的应用程序。

但是,我不确定应该在何时何地为该事件设置处理程序。类中事件本身的 XML 文档TaskScheduler说:

这是否意味着我在整个 AppDomain 中只需要一个处理程序?并且所有未观察到的任务异常都将由它处理?

或者我是否需要每个程序集/每个类都有一个处理程序,并且只有来自该程序集/类中任务的未观察到的异常才会转到该处理程序?

0 投票
1 回答
1632 浏览

.net - 任务继续(OnlyOnFaulted)仍然得到未观察到的异常

我有一个继续处理错误的任务:

继续被击中,但几秒钟后我在应用程序中收到此错误:

通过等待任务或访问其异常属性未观察到任务的异常。结果,未观察到的异常被终结器线程重新抛出。

这与 uiScheduler 有关吗?类似问题的解决方案基本上就是我正在做 的事情 等待任务或访问其异常属性都没有观察到任务的异常。结果,未观察到的异常是

0 投票
4 回答
801 浏览

.net - 调试失败的、未观察到的 TPL 任务

我正在尝试通过失败的集成测试来调试我观察到的间歇性问题,但似乎被困在岩石和坚硬的地方之间。

某处某处正在创建一个System.Threading.Tasks.Task随后失败并导致未观察到的任务异常。在生成的处理程序中,我可以看到任务 ID 和导致它失败的异常。我煞费苦心地分析了我的代码,甚至遵循了我自己的建议并命名了我所有的任务,但仍然没有找到有问题的任务。我的代码似乎根本没有创建它。

所以我尝试在Task构造函数本身上设置断点。我可以使用函数断点(使用诸如“System.Threading.Tasks.Task.Task(System.Action)”之类的位置)来做到这一点。这有效,调试器中断并向我显示Task该类的程序集。但是,我真正需要做的是将 的 ID 与Task最终Task失败的 ID 相关联。

因此,为此,我尝试Task.Id在跟踪点中输出该属性。但是我收到一条消息,说该方法已优化,因此无法评估表达式。

所以我尝试使用源代码进行调试。我设置了我所有的符号和你有什么,但我尽我所能尝试了一切,但它不起作用。经过大量谷歌搜索后,我发现最新的 .NET 4不支持它。

有人对我如何继续诊断此问题有任何想法吗?

0 投票
2 回答
1049 浏览

c# - ContinueWhenAll 是否观察到异常并因此防止出现 UnobservedTaskException?

假设我有一组任务说taskArray,并且我创建了一个任务延续ContinueWhenAll,其中一个或多个任务taskArray抛出了一些异常。我的问题是,是否有任何情况可能导致UnobservedTaskException

所以基本上问题归结为,是否观察到单个任务的ContinueWhenAll异常?如果不是,那么如果我不想明确查看每个任务的异常,那么应该为一组任务使用什么。我不想使用它,因为它不适用于一般任务。taskArrayWaitWaitAll

0 投票
1 回答
389 浏览

c# - 在出现 OnlyOnFaulted 时使用 TPL 时出现未处理的异常

这是来自“C# 5.0 in a Nutshell”的示例代码

我在我的 VS2012 设置中检查了“CLR 异常”:“用户未处理时中断”选项并运行此代码提供了 VS 的“用户代码未处理 NRE 异常”弹出窗口throw null;

我试图在 ContinueWith 和稍后的 Wait 上尝试捕获异常,但仍然得到未处理的异常。

我觉得打开“CLR exceptions”的解决方案:“break on user-unhandled” off 似乎是错误的,因为我实际上处理了这个异常。那么管理它的正确方法是什么?

0 投票
2 回答
1201 浏览

c# - 测试未观察到的异常

我有一个 C# 扩展方法,可以与任务一起使用,以确保所引发的任何异常都被观察到最低限度,以免使托管进程崩溃。在 .NET4.5 中,行为略有改变,因此不会发生这种情况,但仍会触发未观察到的异常事件。我在这里的挑战是编写一个测试来证明扩展方法有效。我正在使用 NUnit 测试框架,而 ReSharper 是测试运行器。

我努力了:

测试总是在Assert.IsTrue. 当我在 LINQPad 之类的东西中手动运行这个测试时,我得到了wasUnobservedExceptiontrue.

我猜测试框架正在捕获异常并观察它,以便TaskScheduler.UnobservedTaskException永远不会触发。

我尝试修改代码如下:

我在这段代码中所做的尝试是让任务在抛出异常之前获得 GC,这样终结器就会看到一个未捕获的、未观察到的异常。然而,这导致了上述相同的失败。

事实上,测试框架是否连接了某种异常处理程序?如果是这样,有没有办法解决它?还是我只是完全搞砸了一些事情,并且有更好/更容易/更清洁的方法来做到这一点?

0 投票
3 回答
8812 浏览

asp.net-web-api - 该操作在 WebAPI 中的 TaskScheduler.UnobservedTaskException 处被取消

最近,我在后端 API 应用程序中为每个 UnobservedTaskException 添加了错误日志记录。原因是某些 API 调用执行了在我返回结果后完成的附加任务,这就是为什么我无法在操作(web api 调用)级别跟踪错误的原因。

现在我收到很多“操作被取消”的异常,不知道该怎么办。我什至不确定这个异常是由我的 API 调用执行的任务引起的。

这是堆栈:

任何想法如何调试它?

0 投票
1 回答
694 浏览

c# - 为什么未为引发异常的任务触发 UnobservedTaskException 事件处理程序?

我有下面的测试程序,它设置了UnobservedTaskException但是OnTaskException方法永远不会执行。有任何想法吗?

注意

如果我删除“ for 循环”,那么一切都会按预期工作。