0

MSDNによると、Thread.Abortメソッドについて-

このメソッドがスレッドで呼び出されると、システムはスレッドで ThreadAbortException をスローしてスレッドを中止します。ThreadAbortException は、アプリケーション コードでキャッチできる特別な例外ですが、ResetAbort が呼び出されない限り、catch ブロックの最後で再スローされます。ResetAbort は中止要求をキャンセルし、ThreadAbortException がスレッドを終了させないようにします。未実行の finally ブロックは、スレッドが中止される前に実行されます。

したがって、例外は、最も直接のcatchブロックから、またはすべてのカプセル化catchブロックから 1 回だけスローされますか? また、未実行finallyのブロックが実行されるとは、完全に未実行のブロックと部分的に実行されたブロックの両方を含みますか?

4

1 に答える 1

2

ブロックは、実行中の場合と、スタックのロールバック中に実行する必要がある場合の両方finallyから常に完全に保護されます。ThreadAbortException

はい、明らかに、それをインターセプトする同じスレッド内ThreadAbortExceptionの任意のブロックの最後で自動的に再発生しtry... catchます。そうしないと意味がありません。ThreadAbortException「ライフ」が 2 つしかないのに、何の役に立つでしょうか。

これで を停止できるのは論理的でしょうThreadAbortExceptionか?

try
{
    try
    {
        // The Thread.Abort "happens" here
        Thread.Sleep(Timeout.Infinite);
    }
    catch
    {
    }
}
catch 
{
}

これはそうではありませんか?

try
{
    // The Thread.Abort "happens" here
    Thread.Sleep(Timeout.Infinite);
}
catch
{
}
于 2013-08-20T08:43:23.467 に答える