Выбор ответа Junior Исключения спрашивают часто обновлено
using и исключения
Вопрос
Внутри using (var conn = new SqlConnection(...)) { ... } выбрасывается исключение. Что произойдёт с соединением?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Dispose будет вызван: using это try/finally. Оператор using компилируется в try { ... } finally { conn?.Dispose(); }, поэтому ресурс освобождается при любом выходе из блока, в том числе при исключении.
Варианты ответа
Disposeне вызовется, соединение позже закроет GCDisposeбудет вызван:usingэтоtry/finallyправильный ответDisposeвызовется, только если исключение поймано внутри- Исключение будет проглочено
usingпослеDispose
Разбор
Оператор using компилируется в try { ... } finally { conn?.Dispose(); }, поэтому ресурс освобождается при любом выходе из блока, в том числе при исключении. Исключение не глотается, а летит дальше после Dispose. Надеяться на GC для соединений нельзя: финализация не детерминирована, пул соединений закончится раньше.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.