未观察到的任务异常 - 任务是从哪里来的?

8

在我的MVC应用程序中,有时会出现以下异常:

System.Net.WebException: The request was aborted: The request was canceled.
   at System.Net.HttpWebRequest.BeginGetRequestStream(AsyncCallback callback, Object state)
   at System.Net.Http.HttpClientHandler.StartGettingRequestStream(RequestState state)
   at System.Net.Http.HttpClientHandler.<>c__DisplayClass4.<PrepareAndStartContentUpload>b__0(Task task)
   at System.Threading.Tasks.Task.Execute()
   --- End of inner exception stack trace ---

编辑 我看到另一种类型:

System.Exception: Unhandled Task Error ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception error)
   at System.Web.HttpApplication.ResumeStepsFromThreadPoolThread(Exception error)
   at System.Web.HttpApplication.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar)
   at System.Threading.Tasks.Task.Execute()
   --- End of inner exception stack trace ---

这是我在事件日志中看到的内容,但它并不完全与时间或数量相关。

A fatal alert was generated and sent to the remote endpoint. This may result in termination of the connection. The TLS protocol defined fatal error code is 40. The Windows SChannel error state is 1205.

An TLS 1.2 connection request was received from a remote client application, but none of the cipher suites supported by the client application are supported by the server. The SSL connection request has failed.

有没有办法识别异常的来源/位置或获取关于异常来自何处的其他信息?

编辑2 这是另一个我看到的。它们都与OnAsyncHandlerCompletion相关,但我不确定来源是什么。

System.Exception: Unhandled Task Error ---> System.NullReferenceException: Object reference not set to an instance of an object.
at System.Web.HttpApplication.get_CurrentModuleContainer()
at System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception error)
at System.Web.HttpApplication.ResumeStepsFromThreadPoolThread(Exception error)
at System.Web.HttpApplication.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar)
at System.Threading.Tasks.Task.Execute()
--- End of inner exception stack trace ---

/EDIT 2


使用类似 Fiddler 或 Wireshark 的嗅探工具来获取 HTTP 的错误信息。您可以查看“管理工具:事件查看器”以获取更多详细信息。 - jdweng
你不知道你的应用程序在哪里进行了HTTP请求吗? - Yuval Itzchakov
@jdweng Fiddler / Wireshark 可以提供一些上下文,但我正在寻找能够帮助识别代码位置的工具。 - dmarlow
这个问题只在生产环境中出现还是在开发环境中也有出现? - Yuval Itzchakov
@YuvalItzchakov 只在生产环境中出现。突然间,我会看到数百个这样的异常,几乎同时出现。我很困惑为什么它们都被堵塞了,为什么它们似乎都在同一时间被转储。我也不确定是我的代码还是我依赖的某些东西。例如 Azure DataCache(我正在使用 In-Role 缓存)。这可能是其中某个组件引起的问题吗? - dmarlow
显示剩余5条评论
1个回答

0
您可以订阅TaskScheduler.UnobservedTaskException事件,或许能够获取更多有关异常的信息。

1
这就是我目前遇到异常的地方。我只是在记录日志,并且对其起源感到好奇,因为它包含了很少有用的信息。 - dmarlow
我还没有找到查看原始错误位置的方法。另外,请注意,“对象引用未设置为对象的实例”并不意味着这是您代码中的错误。我通过显式抛出未处理的异常并将其“转化”为空引用异常来验证了这一点 :-( - Simon_Weaver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接