Yes it does always execute. A block like this actually gets compiled into something like the below:
try
{
try
{
..
}
catch (..)
{
..
}
}
finally
{
..
}
If you run your code directly in Visual Studio you probably won't see the
finally
block because the console window will close almost immediately once the
throw;
line is called, not giving you enough time to see the printed message. However, if you actually run the application from a Command Prompt, you should see the exception printed out and
then see the code in the
finally
block.