По порядку Middle Исключения обновлено
Порядок обработки исключения
Вопрос
Метод A вызывает B внутри try/catch(InvalidOperationException)/finally. B выполняется внутри своего try/finally и бросает InvalidOperationException. Расставьте события по порядку.
Попробуйте сами
Расставьте шаги по порядку стрелками.
- 1B бросает исключение
- 2Выполняется finally метода A
- 3Выполняется finally метода B
- 4Выполняется catch метода A
- 5Среда ищет подходящий catch, проверяя фильтры when
Показать ответ и разбор
Коротко
Обработка в .NET двухпроходная: сначала ищется обработчик (и вычисляются фильтры) без раскрутки стека, затем стек раскручивается, по пути выполняются вложенные finally (сначала в B), потом тело найденного catch в A и в конце его finally.
Правильный порядок
- 1B бросает исключение
- 2Среда ищет подходящий catch, проверяя фильтры when
- 3Выполняется finally метода B
- 4Выполняется catch метода A
- 5Выполняется finally метода A
Разбор
Обработка в .NET двухпроходная: сначала ищется обработчик (и вычисляются фильтры) без раскрутки стека, затем стек раскручивается, по пути выполняются вложенные finally (сначала в B), потом тело найденного catch в A и в конце его finally.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.