【发布时间】:2014-08-11 08:28:45
【问题描述】:
我有当前代码:
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;
}
【问题讨论】:
-
不要“抛出前任”。只是“扔”。前者将重置堆栈跟踪。
-
您的推理中的基本缺陷是您希望程序员总是为 TAE 编写一个 catch 子句。他们当然没有。至少不是因为他们不希望被那样对待。
标签: c# multithreading exception