using System.Threading.Tasks;
using System.Runtime.CompilerServices;
using System.Diagnostics;
public static void Main()
private static async void DoStuff()
Console.WriteLine("Hello World");
Console.WriteLine("Took: {0} ms", watch.ElapsedMilliseconds);
await TimeSpan.FromSeconds(1);
Console.WriteLine("Took: {0} ms", watch.ElapsedMilliseconds);
Console.WriteLine("Took: {0} ms", watch.ElapsedMilliseconds);
Console.WriteLine("Took: {0} ms", watch.ElapsedMilliseconds);
Console.WriteLine("Took total: {0} ms", watch.ElapsedMilliseconds);
Console.WriteLine("Bye World");
public TimeSpan TimeSpan { get; }
private Delay(TimeSpan timeSpan)
public static Delay Seconds(int seconds)
return new Delay(TimeSpan.FromSeconds(seconds));
public static class WeirdExtensions
public static TaskAwaiter GetAwaiter(this Delay delay)
return Task.Delay((int)delay.TimeSpan.TotalMilliseconds).GetAwaiter();
public static TaskAwaiter GetAwaiter(this TimeSpan timespan)
return Task.Delay((int)timespan.TotalMilliseconds).GetAwaiter();
public static TaskAwaiter GetAwaiter(this int seconds)
return Delay.Seconds(seconds).GetAwaiter();
public static async Task Seconds(this int seconds)
await Delay.Seconds(seconds);
public static async Task Seconds(this TimeSpan timespan)
await Delay.Seconds((int)timespan.TotalSeconds);