【发布时间】:2010-01-18 09:30:48
【问题描述】:
我想再次谈谈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 的数量略少,因为一些线程在没有中止的情况下完成或最终可能被中止。
所以问题是,我错过了什么吗?
【问题讨论】:
标签: .net multithreading abort