2010-07-19 80 views

回答

0

將它捕獲在單獨的catch塊中是安全的。作爲一種替代方案,您可以捕獲所有例外情況,然後檢查給定例外e is ThreadAbortException

我離開這篇文章只是因爲評論。顯然,我對這個例外並不瞭解。

+1

ThreadAbortExceptions在與try/catch塊交互的方式中有一些獨特的行爲:在某些(所有?)情況下,它們將自動從catch塊中重新拋出,因此您可能無法完全「吞下」與其他類型一樣的例外情況。我承認,我並不完全瞭解這種行爲的細微差別。此線程可能能夠給你更多的洞察力:http://stackoverflow.com/questions/2830389/whats-the-deal-with-the-hidden-throw-when-catching-a-threadabortexception – mikemanne 2010-07-19 18:05:32

+0

看來我設法「吞下」異常,或者至少它不會在下一個寫入日誌條目的「catch(Exception)」塊中再次捕獲,這正是我想要實現的。只是想知道如果這是一種安全的方式來做到這一點,它不會破壞其他任何東西(這一切似乎工作正常,但與瘋狂的ASP.NET生命週期,你永遠不知道......) – Farinha 2010-07-20 08:33:53

1

如果您需要停止ThreadAbortException進一步傳播呼叫堆棧,則可以致電Thread.ResetAbort。所以試試這樣的:

try 
{ 
    // some code 
} 
catch (ThreadAbortException ex) 
{ 
    // do some logging 
    Thread.ResetAbort(); 
} 

至於「正確」 - 這取決於您的使用情況。除非你明確知道它爲什麼被提出,否則我通常會對捕捉這些東西持謹慎態度。特別是它是一個「現在停止,迅速,並放棄你在做什麼」信號。重置它並繼續進行進一步處理應謹慎。