title: Threading.Tasks.TaskScheduler - Please help me wrap my brain around this
body: <p>I am working on an application that will have a background process running for quite a while and I want to report progress to the UI.  I want to use Tasks in .Net 4.0 so that I gain a working understanding of them.  I found a wonderful article by Stephen Cleary that shows this and includes a class, ProgressReporter (article link at the bottom).</p>
  
  <p>I could just take the class and use it as-is, but then I don't own the knowledge.  The part that I simply cannot understand is regarding the TaskScheduler object.  I have read the documentation, but it makes the assumption that I already know what a Scheduler is and I don't, actually.</p>
  
  <p>From Stephen's article it appears that if I create a TaskScheduler, using "FromCurrentSynchronizationContext", from the event that's about to kick off the background task, then I can use that TaskScheduler instance from within the async process to create a new task that will then have access to UI controls and will, in fact, be running on the UI thread.</p>
  
  <p>At least that's what it looks like from the clean, elegant code.</p>
  
  <p>Can someone help me understand what a TaskScheduler (or just a Scheduler) is so that the "FromCurrentSynchronizationContext" makes sense?</p>
  
  <p>Thanks so much!</p>
  
  <p>Link to article referenced:
  <a href="http://nitoprograms.blogspot.com/2010/06/reporting-progress-from-tasks.html" rel="nofollow">http://nitoprograms.blogspot.com/2010/06/reporting-progress-from-tasks.html</a></p>