title: Can running object be garbage collected?
body: <p>I have a simple class:</p>
  
  <pre><code>public class Runner
  {
      public void RunAndForget(RunDelegate method)
      {
          ThreadPool.QueueUserWorkItem(new WaitCallback(Run), method);
      }
  
      private void Run(object o)
      {
          ((RunDelegate )o).Invoke();
      }
  }
  </code></pre>
  
  <p>And if I use this like so:</p>
  
  <pre><code>private void RunSomethingASync()
  {
      Runner runner = new Runner();
      runner.FireAndForget(new RunDelegate(Something));
  }
  </code></pre>
  
  <p>Is there any danger using it like this? My C++ guts tell me that runner object should be destroyed after RunSomethingASync is finished. Am I right? What happens then to the method running on different thread?</p>
  
  <p>Or perhaps it is other way around and runner will not be collected? That would be a problem considering I may call RunSomethingASync() many times.</p>