Re: Retrieve thrown exception in using (disposable) cleanup

From: Alexander Shirshov (alexander_at_omnitalented.com)
Date: 03/22/05


Date: Tue, 22 Mar 2005 10:06:08 +0700

Emil,

It's generally suggested not to throw exceptions in Dispose:

http://blogs.msdn.com/clyon/archive/2004/09/23/233464.aspx

But if you insist... Can you save ErrorException in a field until Dispose
method called?

class MySession : : IDisposable
{
    ErrorException thrownEx = null;

   Dispose()
   {
      if (mytransaction.IsOpen)
         throw new SessionException("Transaction not closed!", thrownEx);
   }
}

OtherFunc()
{
   using (MySession session)
  {
     :
    thrownEx = new ErrorException("whoops!");
    throw thrownEx;
     session.Commit();
  }
}

HTH,
Alexander

"Emil Astrom" <emil_astrom(at)hotmail.com> wrote in message
news:uU9o$CnLFHA.3760@TK2MSFTNGP12.phx.gbl...
> Hi!
>
> I wonder if there's a way to retrieve information about thrown, not yet
> handled exceptions. My situation is similar to the code below:
>
> class MySession : IDisposable
> {
> :
> :
> Dispose()
> {
> if (mytransaction.IsOpen)
> throw new SessionException("Transaction not closed!", XXX);
> }
> }
>
> OtherFunc()
> {
> using (MySession session)
> {
> :
> throw new ErrorException("whoops!");
> session.Commit();
> }
> }
>
>
> What I want to do is to have a Dispose() method that can include the
> already thrown exception as an inner exception in its own exception that
> it needs to throw if it's called prematurely. What I would like to have in
> the example above is a thrown SessionException with the ErrorException
> instance in the InnerException property. Can this be done?
>
> If not, then I can only see two options:
> * not include ErrorException in my SessionException when I throw it, but
> that means losing the original error
> * not throw an exception in my Dispose method at all, but that means not
> having any error messages for improper use of the MySession class, e.g.
> forgetting to call Commit().
>
> Maybe someone have more (and better) alternatives? All suggestions are
> greatly appreciated!
>
> Regards,
>
> Emil
>



Relevant Pages

  • Retrieve thrown exception in using (disposable) cleanup
    ... I wonder if there's a way to retrieve information about thrown, ... class MySession: IDisposable ... thrown exception as an inner exception in its own exception that it needs to ...
    (microsoft.public.dotnet.languages.csharp)
  • RE: Wrapping Word.Application object with an IDisposable class?
    ... there is an unhandled exception in my program, ... Word process is not closed in Dispose method when the application is tested ... Microsoft Online Community Support ... where an initial response from the community or a Microsoft Support ...
    (microsoft.public.dotnet.languages.vb)
  • Re: main form, IDisposable, and Application.Run
    ... exception is thrown between construction and the method call. ... open forms (which would obviously dispose the form). ... Maybe the exception is being thrown from the constructor after all, ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: AccessViolationException and Native Exception
    ... dispose a data reader you've already closed or something like that? ... while I prepare the sample you asked me, I send you the exception ... the following exception is thrown: ... and each method opens the connection, ...
    (microsoft.public.sqlserver.ce)
  • Re: SQL Server Mobile 3.0 - Out of Memory Exception
    ... the main difference comes in when you start looking at exception ... cmd and hitting the Dispose(), the using pattern makes sure the command ... object objCount = cmd.ExecuteScalar; ... I develop an application with CF 2.0 SP1 and SQL Server Mobile 3.0. ...
    (microsoft.public.dotnet.framework.compactframework)