2010-09-08 56 views

回答

12

是的。

試試看!

+1

哈哈,教人以漁...;) – 2010-09-08 14:01:02

+4

.....你很快就會發現你應該先教他如何游泳:) – 2010-09-08 14:07:29

6

很簡單的測試:

try 
{ 
    Response.Redirect(someurl); 
} 
finally 
{ 
    File.WriteAllText("C:\\Temp\\test.txt", "The finally block ran."); 
} 
3

爲什麼你不只是試試呢?

finally總是運行,除了在這些極端的情況:

  • 總應用程序崩潰,或應用程序終止(例如FAILFAST())
  • 嚴重異常
  • 線程遭到停權的數量有限(例如Thread.Abort())
  • 硬件故障(例如機器失電)
  • Infinite loo (最終導致應用程序終止)
+2

哦不,不是這個論點再次:)有幾個「終於」塊不會運行的情況。它已被討論過:http://stackoverflow.com/questions/3216046/does-the-c-finally-block-always-execute – David 2010-09-08 14:03:28

+0

編輯答案更精確一點。儘管如此,除了EXTREME情況下,最後*總是*運行。 – abelenky 2010-09-08 17:26:22

2

是的。保證運行finally中的代碼,除非發生災難性事件。

2

是的。這裏是你如何檢查我是否正確。只需放置一個消息框或從終端寫點東西到控制檯,你就會得到你的答案。

4

確實如此。看到這個MSDN文章:Finally always executes

+1

「最後總是執行。」那麼,不是_always_。 http://stackoverflow.com/questions/3216046/does-the-c-finally-block-always-execute – David 2010-09-08 14:11:02

+0

@David Touche。最後總是執行,除非CLR控制範圍以外的災難。更好?:) – 2010-09-08 18:41:24

+0

@Dave:這只是一個有趣的主題考慮,不是嗎?我可能會在下次發現自己對候選人進行技術性預選屏幕時,將其作爲一個面試問題使用:「一個'finally'塊總是保證執行,如果不是,那麼在什麼情況下不會呢?」到目前爲止,我可以想到7個截然不同的(儘管其中有些是密切相關的)情景,這些情景會阻止它。 – David 2010-09-08 18:50:43

6

它會運行。 Response.Redirect實際上會拋出一個ThreadAbortException異常,所以這就是爲什麼後面的代碼不會運行(當然除了最後塊之外的任何東西)。

3

終端中的代碼將運行,但它會在重定向之前運行,因爲在方法返回之前重定向不會發送到瀏覽器,並且最終代碼將在該方法返回之前執行。

3

試試這個:

try 
{ 
    Response.Redirect("http://www.google.com"); 
} 
finally 
{ 
    // Will this code run? 
    // yes :) 
    Response.Redirect("http://stackoverflow.com/questions/3668422/will-code-in-finally-run-after-a-redirect"); 

} 
2

的一般規則是,在最終將在所有情況下(try/catch語句)應用代碼