Reputation: 65411
Take for example the following code:
try
{
Response.Redirect(someurl);
}
finally
{
// Will this code run?
}
Will the code in the finally block run?
Upvotes: 9
Views: 4249
Reputation: 64702
Why do you not just try it?
finally
always runs, except in these extreme scenarios:
Upvotes: 3
Reputation: 434
The general rule is that the code in finally will be applied in all cases (try/catch)
Upvotes: 2
Reputation: 2190
Try this:
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");
}
Upvotes: 3
Reputation: 375654
The code in the finally will run, but it will run before the redirect, since the redirect won't be sent to the browser until the method returns, and the finally code will execute before the method returns.
Upvotes: 3
Reputation: 171824
It will run. Response.Redirect actually throws a ThreadAbortException, so that's why code after that will not run (except anything in a finally block of course).
Upvotes: 7
Reputation: 3413
It will indeed. See this MSDN article: Finally always executes
Upvotes: 5
Reputation: 3567
Yes. Here is how you can check if I am right or not. Simply place a message box or write something to the console from finally and you will have your answer.
Upvotes: 2
Reputation: 48137
Yes. Code in the finally
is guaranteed to run, unless something catastrophic happens.
Upvotes: 2
Reputation: 78282
Simple enough to test:
try
{
Response.Redirect(someurl);
}
finally
{
File.WriteAllText("C:\\Temp\\test.txt", "The finally block ran.");
}
Upvotes: 6