c# - Thread.ResetAbort 的好处

标签 c# .net multithreading

当通过 Thread.Abort() 取消线程时,会在调用 Thread.Abort() 的线程内抛出 ThreadAbortException。这导致线程立即停止其工作,并且异常在调用堆栈中冒泡,直到它离开线程的 main 方法。这会导致线程中止。

在调用 Thread.ResetAbort() 的线程主方法中,当线程由于退出其主线程而在 catch block 之后自行终止时,ExceptionHandler 对于 ThreadAbortException 有什么好处方法?

private void ThreadMainMethod( )
{
    try
    {
        while(runningAllowed = true)
        {
            //Do some work here
        }
    }
    catch ( ThreadAbortException )
    {
        Thread.ResetAbort( );
    }
}

最佳答案

我能想到的一个场景是您想以一种可控的方式关闭线程。假设您有一个正在轮询某些资源的工作线程。如果应用程序的主线程在工作线程上调用 Abort,则会抛出 ThreadAbortException。然后,您可以在工作线程的启动方法中捕获该异常,调用 ResetAbort,然后通过释放资源、关闭打开的文件/连接等来完成该方法:

public void ThreadStarter()
{
    try
    {
        RunWorkerLoop();
    }
    catch (ThreadAbortException)
    {
        Thread.ResetAbort();
    }

    // clean up and end gracefully

}

关于c# - Thread.ResetAbort 的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1339440/

相关文章:

c# - WPF 应用程序退出代码

c# - WPF Canvas 绑定(bind)

.net - 使用 MSTest Framework 测试面向 .NET Standard 1.6 及更高版本的应用程序

java - 类型不匹配错误 : Cannot convert from Player to Thread

c# - 为什么 C# 中没有声明性不变性?

具有 "NOT IN"功能的 C# Predicate Builder

c# - 在 WebBrowser 控件上显示 PDF 不起作用

.net - 从 VSIX 安装程序包运行 shell 命令或可执行文件?

c# - 报告类型参数错误的最佳实践?

python - 尝试使用多线程并行化 python 算法并避免 GIL 限制