title: Why use try {} finally {} with an empty try block?
body: <p>I noticed in <code>System.Threading.TimerBase.Dispose()</code> the method has a <code>try{} finally{}</code> block but the <code>try{}</code> is empty.</p>
  
  <p>Is there any value in using <code>try{} finally{}</code> with an empty <code>try</code>?</p>
  
  <p><a href="http://labs.developerfusion.co.uk/SourceViewer/browse.aspx?assembly=SSCLI&amp;namespace=System.Threading&amp;type=TimerBase" rel="noreferrer">http://labs.developerfusion.co.uk/SourceViewer/browse.aspx?assembly=SSCLI&amp;namespace=System.Threading&amp;type=TimerBase</a></p>
  
  <pre><code>[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
  internal bool Dispose(WaitHandle notifyObject)
  {
      bool status = false;
      bool bLockTaken = false;
      RuntimeHelpers.PrepareConstrainedRegions();
      try {
      }
      finally {
          do {
              if (Interlocked.CompareExchange(ref m_lock, 1, 0) == 0) {
                  bLockTaken = true;
                  try {
                      status = DeleteTimerNative(notifyObject.SafeWaitHandle);
                  }
                  finally {
                      m_lock = 0;
                  }
              }
              Thread.SpinWait(1);
              // yield to processor
          }
          while (!bLockTaken);
          GC.SuppressFinalize(this);
      }
  
      return status;
  }
  </code></pre>