using System.Threading.Tasks;
public static async Task Main()
Console.WriteLine("Hello World");
Console.WriteLine("Goodbye World");
private static async Task TestAsync()
var t1 = DoStuffAsync(1);
var t2 = t1.ContinueWith(x => DoSyncStuff(2));
Console.WriteLine("Caller processing " + DateTime.Now);
Console.WriteLine("Task " + await t1 + " is done. " + DateTime.Now);
Console.WriteLine("Caller finished " + DateTime.Now);
private static void DoSyncStuff(int number)
Console.WriteLine($"{number} will sync sleep at " + DateTime.Now);
Console.WriteLine($"{number} done sync sleeping at " + DateTime.Now);
private static async Task<int> DoStuffAsync(int number)
Console.WriteLine($"{number} task starting at " + DateTime.Now);
var task = Task.Delay(2000);
Console.WriteLine($"{number} task created at " + DateTime.Now);
Console.WriteLine($"{number} done sleeping at " + DateTime.Now);
Console.WriteLine($"{number} completed at " + DateTime.Now);