Я пытаюсь написать метод 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;
}
}
}
Есть ли что-нибудь, что может предоставить эту информацию?