title: Multithreaded file download using web client
body: <p>I have a situation where I need to download huge (~1 GB) media files from a webdav server from a C# windows Service app. I was contemplating on which is a better approach:</p>
  
  <ul>
  <li>Using the WebClient async methods to download the files stored in an array with the call backs on the main thread to notify download completion. Can use manual reset events for synchronization</li>
  <li>Use Background workers and web client synchronous download methods</li>
  <li>Use ThreadPool and Web Client synchronous download methods</li>
  <li>Use manual threads and Web Client synchronous download methods</li>
  </ul>
  
  <p>I tried with the Web Client async download APIs but they do not seem to be non-blocking as my main thread seems to get blocked when calling a web service on the main thread after initialising the media downloads and throws an Operation Timed Out eventually and the media files are not downloaded parallely but one by one as witnessed in the download folder.</p>
  
  <p>Waht would be your suggestions.</p>