请不要在此问题上设置重复标志- 这不是关于“为什么会发生 ThreadAbortException”,而是关于“为什么 w3wp.exe 进程在 ThreadAbortException 之后终止”。
假设我们有一个带有以下代码示例的简单 Web 应用程序:
protected void Page_Load(object sender, EventArgs e)
{
Response.Redirect("http://google.com");
}
这实际上意味着类似(参见Is Response.End() 被认为有害吗?):
protected void Page_Load(object sender, EventArgs e)
{
...response write some data...
System.Threading.Thread.CurrentThread.Abort();
}
在我的机器(Windows 10 Pro + IIS)上,此代码导致 IIS 池进程终止,错误代码为 0x0(不执行重定向)。在其他机器(不是 Windows 10)上,此代码仅生成 ThreadAborted 异常,但进程继续工作(重定向执行)。
有人可以检查这个样本并解释发生了什么吗?
更新 这里有一些与此问题相关的 Windows 事件日志。
日志 #1
发生未处理的异常,进程终止。
应用程序 ID:/LM/W3SVC/1/ROOT/AS
进程号:6700
异常:System.Threading.ThreadAbortException
消息:线程被中止。
StackTrace:在 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) 在 System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags) 在 System.Web.Hosting.PipelineRuntime.ProcessRequestNotification (IntPtr rootedObjectsPointer、IntPtr nativeRequestContext、IntPtr moduleData、Int32 标志)
日志 #2
Faulting application name: w3wp.exe, version: 10.0.10240.16384, time stamp: 0x559f3dad
Faulting module name: KERNELBASE.dll, version: 10.0.10240.16384, time stamp: 0x559f3b2a
Exception code: 0xe0434352
Fault offset: 0x000b3e28
Faulting process id: 0x1a2c
Faulting application start time: 0x01d0e4b1b3ed01cb
Faulting application path: C:\WINDOWS\SysWOW64\inetsrv\w3wp.exe
Faulting module path: C:\WINDOWS\SYSTEM32\KERNELBASE.dll
Report Id: 23b5298d-3b36-49c7-a294-de9c864b703f
Faulting package full name:
Faulting package-relative application ID: