Tag: threadabortexception

为什么在ThreadAbortException中有时*没有执行finally块*如果它包含await?

更新:我不认为这个问题是否可以重复, 最后可以跳过ThreadAbortException? 因为(1)我没有创建另一个线程,所以不存在竞争条件,(2)只有当finally块包含await时才会出现这种行为,而其他问题没有提及。 考虑这个控制台程序: class Program { static void Main() { try { T().GetAwaiter().GetResult(); } catch (ThreadAbortException) { Thread.ResetAbort(); } catch { } } static async Task Abort() { //await Task.Delay(1); // A Thread.CurrentThread.Abort(); // B } static async Task T() { try { await Abort(); } catch { Console.WriteLine(“catch”); throw; } finally { Console.WriteLine(“finally”); […]

ASP.NET应用程序中的Thread.Abort导致w3wp.exe崩溃

请不要在此qustion上设置重复标志 – 它不是“为什么发生ThreadAbortException”,它是关于“为什么w3wp.exe进程在ThreadAbortException之后终止”。 假设我们有简单的Web应用程序,其中包含以下代码示例: protected void Page_Load(object sender, EventArgs e) { Response.Redirect(“http://google.com”); } 事实上这意味着什么(参见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)上,此代码仅生成ThreadAbortedexception,但进程继续工作(重定向执行)。 有人可以检查这个样本并解释发生了什么吗? 更新这里有一些与此问题相关的Windows事件日志。 记录#1 发生未处理的exception并终止该过程。 应用ID:/ LM / W3SVC / 1 / ROOT / AS 进程ID:6700 例外:System.Threading.ThreadAbortException 消息:线程正在中止。 StackTrace:位于System.Web.Hosting.PipelineRuntime.ProcessRequestNotification的System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr rootedObjectsPointer,IntPtr nativeRequestContext,IntPtr […]

由于AcceptSocket,Thread.Abort似乎没有抛出ThreadAbortException

我在下面的线程上调用ChannelServer.ListeningThread.Abort ,但似乎没有任何事情发生。 我想更具体一点,但我想不出更多。 似乎没有抛出ThreadAbortException ,并且无论阻塞侦听器如何都应抛出此exception(它在阻塞接收的线程上完美运行)。 重要编辑 :使用ManualResetEvent.WaitOne而不是AcceptSocket ,正如Lyrik建议进行测试一样,它完美无缺。 为什么AcceptSocket阻止ThreadAbortException ? 链接 :这个论坛主题似乎讨论了同样的问题,虽然我无法解决任何问题: http : //www.tek-tips.com/viewthread.cfm?qid = 319436&page = 413 ChannelServer.ListeningThread = new Thread(new ThreadStart(delegate() { Log.Inform(“Waiting for clients on thread {0}.”, Thread.CurrentThread.ManagedThreadId); while (true) { try { new Thread(new ParameterizedThreadStart(ChannelClientHandler.Initialize)).Start(ChannelServer.Listener.AcceptSocket()); } catch (ThreadAbortException) { Log.Inform(“Aborted client listening thread {0}.”, Thread.CurrentThread.ManagedThreadId); break; } } })); ChannelServer.ListeningThread.Start();