我想再谈谈Thread.Abort
函数的安全性。我很想有一些方法来中止我无法真正控制并且实际上不想要的操作,但我希望尽快让我的线程空闲,以防止我的应用程序出现线程渴求。
所以我写了一些测试代码来看看是否可以使用Thread.Abort
并让中止线程正确地清理资源。这是代码:
int threadRunCount = 0;
int threadAbortCount = 0;
int threadFinallyCount = 0;
int iterations = 0;
while( true )
{
Thread t = new Thread( () =>
{
threadRunCount++;
try
{
Thread.Sleep( Random.Next( 45, 55 ) );
}
catch( ThreadAbortException )
{
threadAbortCount++;
}
finally
{
threadFinallyCount++;
}
} );
t.Start();
Thread.Sleep( 45 );
t.Abort();
iterations++;
}
所以,到目前为止,这段代码工作了大约 5 分钟,并且threadRunCount
总是等于threadFinally
并且threadAbort
数量略少,因为一些线程在没有中止的情况下完成,或者最终可能被中止。
所以问题是,我错过了什么吗?