С# - Try-Catch-finally on Return

У меня есть следующий код:

public DataTable GetAllActiveUsers()
{
            DataTable dataTable = new DataTable();

            try
            {
                connection.Open();

                SqlCommand getAllActiveUsersCommand = new SqlCommand(getAllUsers, connection);

                SqlDataAdapter dataAdapter = new SqlDataAdapter(getAllActiveUsersCommand);
                dataAdapter.Fill(dataTable);

                return dataTable;
            }
            catch(Exception e)
            {
                Console.WriteLine(e);

                return null;
            }
            finally
            {
                connection.Close();
            }
        }

В основном я получаю активных пользователей в моей базе данных. Но может кто-нибудь объяснить мне, будет ли выполняться блок Finally, если он успешно запускает блок try и возвращает DataTable??

Спасибо

Ответ 1

Да.

Как указано здесь: MSDN

Как правило, операторы блока finally выполняются, когда элемент управления покидает попробуй выписать Передача контроля может произойти в результате нормального выполнение, выполнение перерыва, продолжения, перехода или возврата оператор или распространение исключения из оператора try.

Но, наконец, блок не всегда выполняется. Вы можете прочитать анекдот Алекса Пападимулиса здесь

Ответ 2

Да, это так.
Блок finally будет выполнен независимо от того, есть ли оператор return или исключение, выброшенное в блоке try {} catch().

Ответ 3

блок finally всегда выполняется.

вы должны удалить в блоке finally. Поскольку, dispose также закрывает соединение и предоставляет неуправляемые ресурсы памяти.

finally
{
    connection.Dispose();
}