Обнаружить исключение в блоке finally - PullRequest
6 голосов
/ 26 августа 2011

Я пытаюсь написать метод Dispose, который может вызвать исключение.

Утилизация вызывается по шаблону try-finally через оператор using:

using(var widget = new Widget())
{
   widget.DoYourThing();
}

Проблема заключается в том, что если исключение вызывается методом Dispose, оно заменяет любое исключение, которое могло возникнуть в теле блока using. Обычно это исключение менее полезно, чем выбрасываемое в тело.

Я хотел бы написать метод Dispose таким образом, чтобы он глотал свои собственные исключения, если уже существует исключение. Что-то вроде следующего было бы идеально:

protected virtual void Dispose(bool disposing)
{
    try
    {
        this.Shutdown();
    }
    catch(Exception)
    {
        this.Abort();

        // Rethrow the exception if there is not one already in progress.
        if(!Runtime.IsHandlingException)
        {
            throw;
        }
    }
}

Есть ли что-нибудь, что может предоставить эту информацию?

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Действительно ли необходимо, чтобы ваш метод Dispose мог генерировать исключение?

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

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