C# - 线程中止异常(Thread Abort Exception)重新抛出自身

标签 c# multithreading exception

我有当前代码:

class Program
{
    private static void Main()
    {
        while (true)
        {

            try
            {
                Thread.CurrentThread.Abort();
            }
            catch (ThreadAbortException)
            {
                Console.WriteLine("Abort!");
                Thread.ResetAbort();
            }


            Console.WriteLine("now waiting");
            Console.ReadKey();
        }
    }
}

现在我知道 ResetAbort 方法应该可以防止 ThreadAbortException 继续重新抛出自身,即使 catch 语句正在捕获它,但我的问题是:

如果任何人都可以使用ResetAbort 方法,那么专门重新抛出异常的意义何在?

用户只需做

    catch (ThreadAbortException ex)
    {
        Console.WriteLine("Abort!");
        throw ex;
    }

最佳答案

Thread.ResetAbort() 不适合一般用途。如果您不理解为什么会发生 thead 中止,它可能会导致意外行为。因此,可能为了使 ASP.NET 在共享主机环境中稳定,调用 Thread.ResetAbort()

需要 SecurityPermissionFlag.ControlThread 权限

MSDN Link

关于C# - 线程中止异常(Thread Abort Exception)重新抛出自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24329670/

相关文章:

WPF 在单独的线程中运行动画

c++ - 不扩展 std::exception 的运行时异常消息

c# - PLINQ 查询给出溢出异常

c# - 序列化和反序列化的 NullValueHandling 的不同值

c# - 等待停止线程的执行并且永远不会继续

c++ - std::atomic 是如何实现的

python - 为什么我在 Python 中运行了一个额外的线程?

c# - 最小起订量无效方法

java - 将元数据添加到 java throwable 对象

C++ std::stoi 异常:无效参数