using System.Threading.Tasks;
var timeBeforeExecutionSync = DateTime.Now;
var waffleInASink = WeekendToDo();
var timeAfterExecutionSync = DateTime.Now;
Console.WriteLine("Sync Duration: {0}", timeAfterExecutionSync.Subtract(timeBeforeExecutionSync).TotalSeconds.ToString("#"));
var timeBeforeExecutionAsync = DateTime.Now;
var waffled = GetSync<Waffle>(WeekendToDoAsync());
var timeAfterExecutionAsync = DateTime.Now;
Console.WriteLine("Async Duration: {0}", timeAfterExecutionAsync.Subtract(timeBeforeExecutionAsync).TotalSeconds.ToString("#"));
public static T GetSync<T>(Task<T> task)
static Waffle WeekendToDo()
Waffle waffle = MakeWaffle();
static Waffle MakeWaffle()
var task = Task.Delay(2000);
static void ReplyMum() => Thread.Sleep(3000);
static async Task<Waffle> WeekendToDoAsync()
Task<Waffle> waffleTask = MakeWaffleAsync();
Console.WriteLine("replied to Mum");
Waffle waffle = await waffleTask;
Console.WriteLine("waffleTask completed");
static async Task<Waffle> MakeWaffleAsync()
var task = Task.Delay(2000);