using System.Threading.Tasks;
private static Task Head = Task.CompletedTask;
public static void Main(string[] args)
Console.WriteLine("Hello World!");
Console.WriteLine("bob");
static void CreateTask(int i)
Console.WriteLine($"Queue {i}");
Head = Head.SequenceTask(() => DoActionAsync(i));
static async Task DoActionAsync(int i)
Console.WriteLine(DateTime.UtcNow.ToString("HH:mm:ss") + ": Creating " + i);
Console.WriteLine(DateTime.UtcNow.ToString("HH:mm:ss") + ": Finished " + i);
public static class TaskExtensions
public static async Task SequenceTask(this Task before, Func<Task> afterFactory)