2010-09-08 23 views

Trả lời

12

Có.

Hãy thử và xem!

+1

Haha, dạy anh ta cách câu cá ...;) –

+4

..... và bạn sẽ sớm tìm thấy bạn nên đã dạy anh ta làm thế nào để bơi đầu tiên :) –

6

đơn giản đủ để kiểm tra:

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

Tại sao bạn không chỉ cần thử nó?

finallyluôn chạy, ngoại trừ trong những tình huống cực đoan:

  • Tổng số vụ tai nạn ứng dụng, hoặc chấm dứt áp dụng (ví dụ FailFast())
  • Một số giới hạn các trường hợp ngoại lệ nghiêm trọng
  • Chủ đề bị chấm dứt (ví dụ: Thread.Abort())
  • Lỗi phần cứng (ví dụ: mất điện máy)
  • Infinite loo p bên trong khối thử (cuối cùng dẫn đến việc chấm dứt ứng dụng)
+2

Ồ không, không phải đối số này một lần nữa :) Có một số trường hợp trong đó một khối "cuối cùng" sẽ không chạy. Nó đã được thảo luận trước đây: http://stackoverflow.com/questions/3216046/does-the-c-finally-block-always-execute – David

+0

Câu trả lời đã chỉnh sửa chính xác hơn một chút. Tuy nhiên, ngoại trừ trong trường hợp EXTREME, cuối cùng * luôn luôn * chạy. – abelenky

2

Có. Mã số trong finally được đảm bảo để chạy, trừ khi có điều gì đó thảm khốc xảy ra.

2

Có. Đây là cách bạn có thể kiểm tra xem tôi có đúng hay không. Đơn giản chỉ cần đặt một hộp tin nhắn hoặc viết một cái gì đó để bàn điều khiển từ cuối cùng và bạn sẽ có câu trả lời của bạn.

4

Nó thực sự sẽ như thế. Xem bài viết MSDN này: Finally always executes

+1

"Cuối cùng luôn luôn thực hiện." Vâng, không phải _always_. http://stackoverflow.com/questions/3216046/does-the-c-finally-block-always-execute – David

+0

@David Touche. Cuối cùng luôn luôn thực hiện, chặn một thảm họa ngoài tầm kiểm soát của CLR. Tốt hơn?:) –

+0

@Dave: Đó chỉ là một chủ đề thú vị để chiêm ngưỡng, phải không? Tôi có thể sử dụng nó như là một câu hỏi phỏng vấn vào lần sau tôi thấy mình đang thực hiện một màn hình kỹ thuật trước trên một ứng cử viên: "Có một" cuối cùng "khối luôn đảm bảo thực hiện, và nếu không thì trong trường hợp đó sẽ không?" Cho đến nay tôi có thể nghĩ về 7 khác biệt (mặc dù một số trong đó có liên quan chặt chẽ) kịch bản đó sẽ ngăn chặn nó. – David

6

Nó sẽ chạy. Response.Redirect thực sự ném một ThreadAbortException, vì vậy đó là lý do tại sao mã sau đó sẽ không chạy (ngoại trừ bất cứ điều gì trong một cuối cùng là khối tất nhiên).

3

Mã cuối cùng sẽ chạy, nhưng mã sẽ chạy trước khi chuyển hướng vì chuyển hướng sẽ không được gửi đến trình duyệt cho đến khi phương thức trả về và mã cuối cùng sẽ thực thi trước khi phương thức trả về.

3

Hãy thử điều này:

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

Nguyên tắc chung là các mã trong cuối cùng sẽ được áp dụng trong mọi trường hợp (try/catch)

Các vấn đề liên quan