もう一度、機能の安全性についてお話したいと思い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
だから問題は、私は何かが恋しいですか?