【发布时间】: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