C# 导致w3wp.exe | dotnet运行崩溃的异常代码0xe0434352

C# 导致w3wp.exe | dotnet运行崩溃的异常代码0xe0434352,c#,asp.net-core,C#,Asp.net Core,我发现我的服务器上有一个错误导致服务器崩溃,而全局异常处理程序没有处理该错误。 我不能完全确定,我将描述的是同一个问题,我有(使用第三方LIBS,加上自定义逻辑在中间……很难分析完整的代码),虽然我怀疑这是相同的。< /P> 有人能解释一下为什么全局异常处理程序不能处理在开始编写响应后引发的异常吗 如果我们能做些什么 我正在使用ASP.NETCore3.0 公共类启动 { public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境)

我发现我的服务器上有一个错误导致服务器崩溃,而全局异常处理程序没有处理该错误。 我不能完全确定,我将描述的是同一个问题,我有(使用第三方LIBS,加上自定义逻辑在中间……很难分析完整的代码),虽然我怀疑这是相同的。< /P>
  • 有人能解释一下为什么全局异常处理程序不能处理在开始编写响应后引发的异常吗
  • 如果我们能做些什么
我正在使用ASP.NETCore3.0

公共类启动
{
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境){
app.UseExceptionHandler(options=>options.Run(HandleException));
app.Map(“/map1”,HandleMapTest1);
app.Map(“/map2”,HandleMapTest2);
}
私有任务HandleException(HttpContext上下文){
尝试
{
var exceptionFeature=context.Features.Get();
Console.WriteLine(“未处理的异常”);
}
捕获{/*忽略*/}
返回Task.CompletedTask;
}
私有静态void HandleMapTest1(IApplicationBuilder应用程序){
运行(异步上下文=>
{
抛出新的System.Exception(“它将被HandleException捕获”);
wait context.Response.WriteAsync(“映射测试1”);
});
}
私有静态void HandleMapTest2(IApplicationBuilder应用程序){
运行(异步上下文=>
{
var x=新的MyClass();
x、 DoDSomething();
});
}
}
类MyListener
{
公共作废检查(行动){
行动(1);
}
}
类MyClass
{
公共MyListener DoDSomething(){
var x=新的MyListener();
x、 检查(EnterFieldNode);
返回x;
异步void EnterFieldNode(int num)=>wait Validate();
}
专用异步任务验证(){
//做一些会爆炸的事
抛出新异常();
}
}
我已经发现,使用AppDomain中的UnhandledException事件捕获异常是不可能的(至少以一种简单的方式)来避免服务器崩溃的



更新1:示例已更新。终于能够繁殖了。这段代码与我正在使用的第三方库最为相似。它使w3p进程崩溃,我在事件查看器中得到一个错误,异常代码为0xe0434352。

正如上面在评论中提到的@KirkLarkin一样,
async void
就是问题所在。以下是一些包含更多详细信息的链接:


异常处理程序中间件在检测到异常后要做的第一件事是检查是否已发送响应。如果有,它只会重新调用异常。请参阅.ok.dotnet运行时显示异常,但不会崩溃。但如果使用调试器运行,调试会话将停止。虽然全局异常处理程序没有捕获异常,但为什么?我看到了dotnet核心,它检查响应是否已经发送,并冒泡出异常。为什么?为什么全局异常处理程序不运行?扫描您的代码示例,如果您的服务器崩溃,很可能是因为您的aync无效-是的,肯定是因为
async void
。请查看。