title: ThreadAbortException vs graceful event handle exit in C#
body: <p>When aborting the execution of a thread I'm always doubting between a graceful exit with an event handler like this:</p>
  
  <pre><code>int result = WaitHandle.WaitAny(handles);
  if (result = WAIT_FINALIZE)
    FinalizeAndExit();
  </code></pre>
  
  <p>and using the event to signal the thread it must terminate</p>
  
  <p>or just handling the ThreadAbortException to finalize the thread...</p>
  
  <pre><code>try
  {
    // Main execution
  }
  catch(ThreadAbortException e)
  {
    // FinalizeAndExit();
  }
  finally
  {
  }
  </code></pre>
  
  <p>I'm usually inclined to use the ThreadAbortException approach since it can be handled but it is re-raised at the end of the catch block, and it also avoids the thread from being kept alive by "treacherous" methods, but I've seen both approaches.</p>
  
  <p>What's your opinion? Is there any situation where it's best to use one over another, or is it best to use always approach x?</p>