public void UsingAsync() { var requestUri = new Uri("http://google.com"); var tasksNumber = 10; var count = 0; var sp = Stopwatch.StartNew(); var results = new Result<Empty>[tasksNumber]; for (var i = 0; i < tasksNumber; i++) { var index = i; var task = Await.Async(() => { var webRequest = WebRequest.Create(requestUri); webRequest.GetResponse().Close(); Interlocked.Increment(ref count); }); task(result => result.Match(x => results[index] = x)); } while (results.Any(x => x == null)) { Thread.Sleep(1000); Console.WriteLine("{0} - {1}, {2}", sp.Elapsed, count, results.Count(x => x == null)); } Console.WriteLine(sp.Elapsed); }