using System.Threading.Tasks;
using System.Collections.Generic;
using System.Collections.Concurrent;
public static void Main()
var urls = new[] { "http://www.google.co.uk", "http://www.microsoft.com" };
private static void Attempt1(string[] urls)
var tasks = urls.Select(async url =>
var webClient = new WebClient();
var result = await webClient.DownloadStringTaskAsync(url);
var index = Task.WaitAny(tasks.ToArray());
var result = tasks[index].Result;
Console.WriteLine(result.Length);
private static void Attempt1b(string[] urls)
var tasks = urls.Select(url =>
var webClient = new WebClient();
var task = webClient.DownloadStringTaskAsync(url)
var index = Task.WaitAny(tasks.ToArray());
var result = tasks[index].Result;
Console.WriteLine(result.Length);
private static void Attempt2(string[] urls)
var tasks = urls.AsParallel().Select(url => Task.Run(async () =>
var webClient = new WebClient();
var result = await webClient.DownloadStringTaskAsync(url);
var index = Task.WaitAny(tasks.ToArray());
var result = tasks[index].Result;
Console.WriteLine(result.Length);