По порядку Middle Исключения обновлено

Порядок обработки исключения

Вопрос

Метод A вызывает B внутри try/catch(InvalidOperationException)/finally. B выполняется внутри своего try/finally и бросает InvalidOperationException. Расставьте события по порядку.

Попробуйте сами

Расставьте шаги по порядку стрелками.

  1. 1
    B бросает исключение
  2. 2
    Выполняется finally метода A
  3. 3
    Выполняется finally метода B
  4. 4
    Выполняется catch метода A
  5. 5
    Среда ищет подходящий catch, проверяя фильтры when
Показать ответ и разбор

Коротко

Обработка в .NET двухпроходная: сначала ищется обработчик (и вычисляются фильтры) без раскрутки стека, затем стек раскручивается, по пути выполняются вложенные finally (сначала в B), потом тело найденного catch в A и в конце его finally.

Правильный порядок

  1. 1
    B бросает исключение
  2. 2
    Среда ищет подходящий catch, проверяя фильтры when
  3. 3
    Выполняется finally метода B
  4. 4
    Выполняется catch метода A
  5. 5
    Выполняется finally метода A

Разбор

Обработка в .NET двухпроходная: сначала ищется обработчик (и вычисляются фильтры) без раскрутки стека, затем стек раскручивается, по пути выполняются вложенные finally (сначала в B), потом тело найденного catch в A и в конце его finally.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.