title: On which thread(s) does WebClient raise its events?
body: <p>I can not find any documentation that specifies on which thread WebClient raises its events. I ran some tests and determined the following:</p>
  
  <ul>
  <li><p>If called from a UI thread (say from an event handler) the event handler will be executed on that thread. As a test, I added an infinite loop after the call to OpenReadAsync. The event handler was never called.</p></li>
  <li><p>If there is no UI thread, like in a console application, the event handler will be executed on a thread pool thread. In this case, if I wanted to provide some results the rest of the application, I would have to be aware of threading issues.</p></li>
  </ul>
  
  <p>Is this behaviour documented anywhere? I found nothing.</p>
  
  <p>I have the basically the same question concerning the new async features of C# - eventually, the asynchronous code will have to be executed. Will that also spawn a thread pool thread when there is no UI thread? Will that, in turn, require thread safe code?</p>
  
  <p>I feel that I am missing something here - I can only find very little information about this, but this seems important to me.</p>