Неполученные исключения прекращают выполнение.
Если исключение перехватывается и не перебрасывается, выполняется условие catch (), затем предложение finally () (если оно есть) и выполнение затем продолжается с оператором, следующим за блоком try / catch / finally.
Если исключение перехватывается и перебрасывается, предложение catch () выполняется вплоть до оператора throw; предложение finally () (если оно есть) выполняется), затем генерируется исключение (пере), и разматывание стека продолжается.
Поскольку стек вызовов разматывается, предложения finally () выполняются по мере того, как они выходят из области видимости, а Dispose () вызывается, когда переменные, объявленные в операторах использования, выходят из области видимости.
Чего не происходит, так это того, что управление не возобновляется (и не может) возобновиться с того момента, когда было сгенерировано исходное исключение. Похоже, вы перехватываете исключения на высоком уровне, например, свой метод Main (), и ожидаете продолжения выполнения в исходной точке сбоя.
Чтобы это произошло, вам нужно перехватить исключение в той точке, в которой обработка имеет смысл, и, обработав исключение, либо повторить неудачную операцию, либо проигнорировать проблему.
Выполнить обработку исключений довольно сложно; следовательно, изречение о том, что лучшая практика обработки исключений - не обрабатывать ее. Исключения должны быть именно такими: исключительные. Ваш код не должен выбрасывать исключение, как обычно; Вы также не должны обычно использовать исключения в качестве метода проверки или в качестве оператора потока управления.