当通过 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/