Brian,

1) That is not true, using ultimately compiles down to a try/finally.  It's 
always called no matter how the block is exited.

2) This is a fault of the implementation.  It is up to the implementer to 
create a finalizer that disposes of resources that don't implement IDisposabe 
but need disposal (think raw handles).  Regardless, try/finally doesn't improve 
the experience here; whatever method you use to have the caller 
deterministically release resources won't do any good if the finalizer isn't 
implemented correctly.  Implementing IDisposable doesn't get you special 
consideration in the finalizer.

- Nick



On Jun 1, 2012, at 2:42 PM, "Brian Sayatovic" <bsayato...@creditinfonet.com> 
wrote:

> The two problems I'm aware of (and, sorry, my memory is now foggy) are...
> 
> 1. the "using" statement doesn't call your IDisposable's Dispose() method if 
> an exception is thrown inside the using's block (hence why I use try/finally).
> 
> 2. The IDisposable's method will be called by the finalizer if it hasn't been 
> disposed, but not all finalizers are guaranteed to run when a VM is shutting 
> down.  That may not be a problem in this case (is it?), but in general, it's 
> a hazard.
> 
> Regards,
> Brian.
> 
> Brian Sayatovic
> Senior Software Architect
> 
> 866-218-1003 toll-free ext. 8936
> 937-235-8936 office
> 4540 Honeywell Ct. Dayton, OH 45424
> 
> 
> This message may contain confidential/proprietary information from the 
> CINgroup or its subsidiaries.
> If you are not an intended recipient, please refrain from the disclosure, 
> copying, distribution or use of this information. All such unauthorized 
> actions are strictly prohibited. If you have received this transmission in 
> error, please notify the sender by e-mail and delete all copies of this 
> material from any computer.
> 
> 
> -----Original Message-----
> From: Nicholas Paldino [.NET/C# MVP] [mailto:casper...@caspershouse.com]
> 
> Would you clarify the statement "My understanding is IDisposable is wrought 
> with trouble?"
> 
> Perhaps the implementations are, or the usages are (the client doesn't call 
> Dispose, but that same case exists with the current Close method).
> 
> I ask because I've seen a number of discussions (on this list and off) around 
> IDisposable that make unqualified statements like that which don't really 
> point out any problems with IDisposable (or other .NET-specific features).
> 
> - Nick
> 

Reply via email to