using System.Threading.Tasks;
static async Task<string> DoTaskAsync(string name, int timeout)
var start = DateTime.Now;
Console.WriteLine("Enter {0}, {1} ms", name, timeout);
await Task.Delay(timeout);
Console.WriteLine("Exit {0} Duration: {1} ms", name, (DateTime.Now - start).TotalMilliseconds);
static async Task DoWork1Async()
Console.WriteLine("DoWork1Async started");
var t1 = DoTaskAsync("t1.1", 3000);
var t2 = DoTaskAsync("t1.2", 2000);
var t3 = DoTaskAsync("t1.3", 1000);
Console.WriteLine("await t1");
Console.WriteLine("await t2");
Console.WriteLine("await t3");
Console.WriteLine("DoWork1Async results: {0}", String.Join(", ", t1.Result, t2.Result, t3.Result));
static async Task Main(string[] args)