如何诊断此未观察到的异常?

时间:2019-06-18 01:31:58

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

我有一个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端点也被标记为异步。

我花了几天的时间来尝试解决此异常。任何提示将不胜感激!很高兴根据需要提供更多信息。

2 个答案:

答案 0 :(得分:0)

好像您有ThrowUnobservedTaskExceptions set to true。推荐设置(以及.NET 4.7的默认设置)为false

从堆栈跟踪中,我猜想ASP.NET(预核心)取决于被忽略的未观察到的任务异常。尽管这并不理想,但这也并不令人惊讶。

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

答案 1 :(得分:-1)

我建议您可以放置​​各种断点,并尝试查看断点。