kac*_*apy 11 .net exception-handling
catch (ThreadAbortException)
{ }
catch (Exception ex)
{
TraceManager.TraceException(ex,
(int)ErrorCode.GENERIC_EXCEPTION,
ex.StackTrace + "\n" + ex.Message + "\n" + VendorUrl);
}
Run Code Online (Sandbox Code Playgroud)
甚至拥有它是否有意义
catch (ThreadAbortException)
{ }
Run Code Online (Sandbox Code Playgroud)
还是会导致ThreadAbortException
被吞噬和永远丢失?
Jon*_*Jon 34
ThreadAbortException
不能"完全"抓住; 除非首先调用,否则它将自动在catch
块的末尾重新抛出(请参阅链接的MSDN文档页面). Thread.ResetAbort
所以,唯一明智的catch
方法是:
catch (ThreadAbortException)
{
// possibly do something here
Thread.ResetAbort();
}
Run Code Online (Sandbox Code Playgroud)
但这有一种非常邪恶的气味.可能没有理由这样做,所以你可能想重新考虑你的方法.
更新:
关于SO有很多问题需要处理Thread.Abort
:
这个答案与我在这里给出的答案相同.
这个答案扩大了" Thread.Abort
除非克苏鲁正在上升,否则不要打电话"(我大大降低了"恶臭").
还有很多其他的.
ThreadAbortException无法像这样被捕获.除非你调用Thread.ResetAbort();否则它将在catch块的末尾自动重新生成.
像这里有一个用于ThreadAbortException的catch块允许它自动重新抛出而没有catch(Exception)块试图处理它.
归档时间: |
|
查看次数: |
7909 次 |
最近记录: |