title: Forced Garbage collection or reflection to a Private field, which is less evil?
body: <p>We have a third party library that internally uses a SafeHandle to an unmanaged resource.  In some error cases it is necessary to dispose of the object and recreate it. But, there is a bug in the dispose implementation that prevents the Handle from being closed in a subset of these cases.  Which prevents new objects from being successfully created until its finalizer runs.</p>
  
  <p>Two solutions (both evil) have been proposed to deal with this until we can get the third party code fixed:</p>
  
  <ol>
  <li><p>Run a <code>GC.Collect</code> to get the finalizer to run and clean up the object</p></li>
  <li><p>Use reflection to get at the Handle and close it if dispose fails to do so</p></li>
  </ol>
  
  <p>which of these is less evil and why?
  Is there some other method that we haven't considered that is less evil than either of these?</p>