using System.Threading.Tasks;
using System.Collections.Generic;
public async Task<bool> Execute(Action action) {
await Task.Run(() => action());
public static void Main() {
Console.WriteLine("Hello World");
var program = new Program();
var tasks = new List<Task<bool>>() {
program.Execute(() => { Thread.Sleep(500); Console.WriteLine("task1"); }),
program.Execute(() => { Thread.Sleep(100); Console.WriteLine("task2"); }),
program.Execute(() => { Thread.Sleep(250); Console.WriteLine("task3"); }),
var taskAll = program.Execute(() => {
Console.WriteLine("run");
Task.WaitAll(tasks.ToArray());
Console.WriteLine("All Done!");