簡體   English   中英

c# - ThreadAbortException重新拋出

[英]c# - ThreadAbortException rethrowing

MSDN說,對於Thread.Abort方法 -

在線程上調用此方法時,系統會在線程中拋出ThreadAbortException以中止它。 ThreadAbortException是一個特殊的異常,可以被應用程序代碼捕獲,但是在catch塊的末尾重新拋出,除非調用ResetAbort。 ResetAbort取消中止請求,並阻止ThreadAbortException終止線程。 在線程中止之前執行未執行的finally塊。

那么異常只會從最直接的catch塊或者所有封裝的catch塊中拋出一次? 此外,當執行未執行的finally塊時,它是否包括完全未執行和部分執行的塊?

如果它們正在執行,並且如果它們需要在堆棧的回滾期間執行,那么finally塊總是完全受到ThreadAbortException保護。

是的,顯然ThreadAbortException將在攔截它的同一個線程中的任何try... catch塊的末尾自動重新引發,否則它將毫無意義。 只有兩個“生命”的ThreadAbortException有什么用?

這可能會阻止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
{
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM