Re: Retrieve thrown exception in using (disposable) cleanup
From: Emil Astrom ("Emil)
Date: 03/22/05
- Next message: Wilfried Mestdagh: "Re: convert byte[] to string and way around"
- Previous message: Alexander Shirshov: "Re: 2.0Beta1: Determine T from T?"
- In reply to: Alexander Shirshov: "Re: Retrieve thrown exception in using (disposable) cleanup"
- Messages sorted by: [ date ] [ thread ]
Date: Tue, 22 Mar 2005 08:31:55 +0100
Alexander,
Thanks for the suggestion. I've thought about that too but the problem is
that I then explicitly have to catch all exceptions in the using scope (not
all of them are thrown by me). Doable, but it feels clumsy...
I hoped it might be possible to detect thrown exceptions in the same way
that Visual Studio does when debugging, but maybe I'll have to rethink my
design instead.
Cheers,
Emil
"Alexander Shirshov" <alexander@omnitalented.com> wrote in message
news:%23zN$dwoLFHA.2736@TK2MSFTNGP09.phx.gbl...
> 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
>>
>
>
- Next message: Wilfried Mestdagh: "Re: convert byte[] to string and way around"
- Previous message: Alexander Shirshov: "Re: 2.0Beta1: Determine T from T?"
- In reply to: Alexander Shirshov: "Re: Retrieve thrown exception in using (disposable) cleanup"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|