PVi*_*itt 6 .net c# multithreading
通过Thread.Abort()取消线程时,Thread Thread.Abort内部会抛出一个ThreadAbortException.这导致线程立即停止其工作,并且异常在调用堆栈中冒泡,直到它离开线程的main方法.这会导致线程中止.
线程主方法中调用Thread.ResetAbort()的ThreadAbortException的ExceptionHandler有什么好处,当线程因为跳出其主方法而在catch块之后终止自身时?
private void ThreadMainMethod( )
{
try
{
while(runningAllowed = true)
{
//Do some work here
}
}
catch ( ThreadAbortException )
{
Thread.ResetAbort( );
}
}
Run Code Online (Sandbox Code Playgroud)
我能想到的一个场景是你想以受控的方式取消线程.假设您有一个正在轮询某些资源的工作线程.如果应用程序的主线程Abort
在工作线程上调用,ThreadAbortException
则抛出a.然后,您可以在工作线程的start方法中捕获该异常,调用ResetAbort
然后通过释放资源,关闭打开的文件/连接等来完成该方法:
public void ThreadStarter()
{
try
{
RunWorkerLoop();
}
catch (ThreadAbortException)
{
Thread.ResetAbort();
}
// clean up and end gracefully
}
Run Code Online (Sandbox Code Playgroud)
您这样做的唯一原因可能是您是否处于有利位置来决定是否应该真正堕胎。
因此,也许线程会捕获它,检查某些内容的状态,然后再次返回其工作。尽管这确实意味着您基本上使用“ .abort()
”来控制该线程的流程。这是一个非常糟糕的主意。你应该用另一种方式与它沟通。
一般来说,我认为在很多情况下这是一个好主意,并且这不是我能想到的任何特定模式或实现的建议。