【问题标题】:How do I diagnose this unobserved exception?如何诊断此未观察到的异常?
【发布时间】:2019-06-18 01:31:58
【问题描述】:

我有一个 C# webapi 项目,它作为信号器客户端与另一个应用程序进行通信。它定期抛出这个异常,导致它崩溃。我可以通过对其运行一些负载测试来重现异常,但尽管搜索高低我无法确定此异常发生的位置并阻止它。

System.AggregateException: A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread. ---> System.NullReferenceException: Object reference not set to an instance of an object.
at System.Web.ThreadContext.AssociateWithCurrentThread(Boolean setImpersonationContext)
at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext)
at System.Web.HttpApplication.System.Web.Util.ISyncContext.Enter()
at System.Web.Util.SynchronizationHelper.SafeWrapCallback(Action action)
at System.Web.Util.SynchronizationHelper.<>c__DisplayClass22_0.<QueueAsynchronous>b__0(Task _)
at System.Threading.Tasks.ContinuationTaskFromTask.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
--- End of inner exception stack trace ---
---> (Inner Exception #0) System.NullReferenceException: Object reference not set to an instance of an object.
at System.Web.ThreadContext.AssociateWithCurrentThread(Boolean setImpersonationContext)
at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext)
at System.Web.HttpApplication.System.Web.Util.ISyncContext.Enter()
at System.Web.Util.SynchronizationHelper.SafeWrapCallback(Action action)
at System.Web.Util.SynchronizationHelper.<>c__DisplayClass22_0.<QueueAsynchronous>b__0(Task _)
at System.Threading.Tasks.ContinuationTaskFromTask.InnerInvoke()
at System.Threading.Tasks.Task.Execute()<---

我的应用程序是 .net 4.7,而信号器集线器正在运行 .net 4.7。我很确定服务器没有涉及。如果我重新启动客户端,它会从上次中断的地方继续工作。

webapi 客户端中有许多异步方法,我已经确认所有内部调用的方法都处于等待状态,并且它们都具有异常处理程序。 webapi 端点也被标记为异步。

我花了几天时间试图弄清这个异常的真相。任何提示将不胜感激!很高兴根据需要详细说明更多信息。

【问题讨论】:

  • 根据您的内部异常,您的代码似乎没有正确地在某处创建实例。会放置各种断点并尝试查看其中断的位置。如果您有一些 try catch 尝试将其注释掉以进行测试,看看会发生什么。
  • 我实际上在我的应用程序的每个 catch 块中都设置了一个断点,并且在此问题发生之前或发生时都没有命中任何一个。

标签: c# exception asp.net-web-api signalr unobserved-exception


【解决方案1】:

好像你有ThrowUnobservedTaskExceptions set to true。推荐的设置(也是 .NET 4.7 的默认设置)是 false

从堆栈跟踪中,我猜想 ASP.NET (pre-Core) 依赖于被忽略的未观察到的任务异常。虽然这并不理想,但也不足为奇。

我建议删除启用ThrowUnobservedTaskExceptions 的配置。

【讨论】:

  • 这个建议没有解决根本原因。
  • 我已经调查过了。顺便谢谢你的建议!我在我的应用程序的任何地方都看不到这个设置,所以我认为它使用的是默认行为并且仍然会崩溃。我将尝试将其设置为 false 并查看问题是否消失。
  • @dylanT:这不是默认行为unless you're running in quirks mode
猜你喜欢
  • 1970-01-01
  • 2016-11-25
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 2011-12-14
相关资源
最近更新 更多