Что означает «обработка кода восстановления исключений» - PullRequest
1 голос
/ 15 декабря 2011

Я изучаю блок приложения обработки исключений и читаю абзац со страницы Microsoft: Когда следует использовать блок приложения обработки исключений?

Исходное содержимое:

Ограничения блока приложения обработки исключений

Блок приложения обработки исключений является дополнением к коду восстановления обработки исключений ;это не замена для него.Если исключения происходят из-за поистине необычных обстоятельств, для приложения может быть невозможно изящно восстановиться и завершить начатую единицу работы.Тем не менее, иногда можно восстановить.Примером является исключение, которое возникает, потому что файл заблокирован.Код восстановления может предписать приложению повторить попытку файла после ожидания в течение некоторого периода времени.

В таких случаях в коде приложения должен быть реализован код восстановления обработки исключений;он не должен быть реализован как обработчик, используемый блоком обработки исключений.Это связано с тем, что требуется доступ к локальным переменным, параметрам и другим контекстным данным.Эти данные находятся вне области видимости и недоступны для обработчиков, запускаемых прикладным блоком обработки исключений.

Что означает «код восстановления обработки исключений»?
Пример также будет полезен.

1 Ответ

1 голос
/ 15 декабря 2011

Код восстановления обработки исключений будет тем, что находится в вашем catch кодовом блоке. Это может быть что-то, что регистрирует ошибку, ищет дружественное сообщение для отображения пользователю или повторяет какой-либо процесс и т. Д.

Из этого цитируемого текста в вашем вопросе:

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

См. В MSDN: Исключения и обработка исключений .

class ExceptionTest
{
    static double SafeDivision(double x, double y)
    {
        if (y == 0)
            throw new System.DivideByZeroException();
        return x / y;
    }
    static void Main()
    {
        // Input for test purposes. Change the values to see
        // exception handling behavior.
        double a = 98, b = 0;
        double result = 0;

        try
        {
            result = SafeDivision(a, b);
            Console.WriteLine("{0} divided by {1} = {2}", a, b, result);
        }
        catch (DivideByZeroException e)
        {
            Console.WriteLine("Attempted divide by zero.");
        }
    }
}

Пример того, почему вы должны обрабатывать исключения как можно скорее, а не в блоке приложения обработки исключений, как говорится, может быть, где вам нужен доступ к локальным переменным. Например. Вы пытаетесь открыть файл, но получаете ошибку. Было бы неплохо сообщить пользователю, какой файл вы не можете открыть. Для этого вам нужен доступ к переменным в методе, который открывает файл. Если вы хотите повторить попытку открытия файла, вам придется сделать это и там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...