Я создал проект службы VS2010 для Windows. В нем я вызываю метод Microsoft.SqlServer.Management.Smo.Database.ExecuteWithResults (выражение). В моем сценарии выражение содержит недопустимый SQL, поэтому вызов завершается с исключением, как и ожидалось.Исключение SQL SMO приводит к тому, что блок finally должен быть пропущен?
Что не ожидал, что метод вызывается в Try /, наконец, блок, но, наконец, блок никогда не выполняется:
try { database.ExecuteWithResults(invalid-sql) }
finally { // code here is NOT executed }
Однако, если я изменить его на TRY/улова /, наконец, блок, вызывается код catch и finally.
try { database.ExecuteWithResults(invalid-sql) }
catch(Exception) { // code here is executed fine }
finally { // as is this code }
Я что-то упустил? Разве окончательный блок никогда не должен выполняться?