namespace Setup_Workspace; public class Runner : Doable { public override Task Do() { Console.WriteLine("Running tasks"); return Task.FromResult(true); } } public abstract class Doable { public abstract Task Do(); public List Followup = new List(); public Doable Then(params Doable[] doables) { foreach (var entry in doables) Followup.Add(entry); return this; } public async Task Run() { if (!await Do()) return; foreach (var entry in Followup) entry.Run(); } }