title: Writing to Console on async event
body: <p>I am using <code>WebClient</code> to submit an array of HTTP requests to a server (order doesn't matter).</p>
  
  <p>Instead of sending a request, waiting, sending, waiting, etc. I wanted to send as many as possible and just wait for the responses as they come, however, and issue arises when I need to write to the console after a specific request was completed.</p>
  
  <p>The output looks fine, then I start to get multiple request messages, then a group of Responses/Errors, rather than the Request Message followed by the response.</p>
  
  <p>Is there any way to block any other Console Writes until each block finishes?</p>
  
  <pre><code>int currentRequest = 1;
  for (int i = 0; i &lt; requests.Count; i++) {
      using (var webclient = new WebClient())
      {
          webclient.DownloadStringCompleted += (sender, e) =&gt;
          {
              Console.WriteLine();
              Info("Request: " + currentRequest + "/" + requests.Count);
              if (e.Error == null) {
                  // Do something with e.Result
              } else {
                  Console.WriteLine("Error: " + e.Error.Message);
              }
              currentRequest += 1;
          };
          webclient.DownloadStringAsync(new Uri("URL HERE"));
      }
  }
  </code></pre>
  
  <p><strong>On another note:</strong> I don't feel like this is how I should be handling requests (asynchronously), correct me if i'm wrong.</p>