using System.Threading.Tasks;
public static async Task<bool> Init()
var series = Enumerable.Range(1, 5).ToList();
var tasks = new System.Collections.Generic.List<Task<Tuple<int, bool>>>();
foreach (var i in series)
int delay = r.Next(1000,10000);
Console.WriteLine("Starting Process {0} for {1}", i, delay);
tasks.Add(DoWorkAsync(i, delay));
foreach (var task in await Task.WhenAll(tasks))
Console.WriteLine("Ending Process {0}", task.Item1);
public static async Task<Tuple<int, bool>> DoWorkAsync(int i, int delay)
Console.WriteLine("working..{0}", i);
return Tuple.Create(i, true);
public static void Main()
Console.WriteLine("Test result was " + (task.Result ? "t" : "f"));