using System.Threading.Tasks;
using System.Runtime.CompilerServices;
public static void Main()
printInfo("main before f1");
printInfo("main after f1");
printInfo("main after wait");
printInfo("f1 before f2");
printInfo("f1 after f2");
var t1 = Task.Run(() => printInfo("lambda before delay"));
printInfo("f2 before delay");
await Task.Delay(TimeSpan.FromSeconds(3));
printInfo("f2 after delay");
var t2 = Task.Run(() => printInfo("lambda after delay"));
printInfo("f2 before {t1,t2} await");
[CallerMemberName] string methodName = "",
[CallerLineNumber] int lineNum = -1)
var thread = Thread.CurrentThread;
var e = new ArgumentException();
Console.WriteLine(String.Format("{0,-25}: {1,-8} {2,3}; bgnd={3,-5} pool={4,-5} tid={5,-3};",
label, methodName, lineNum, thread.IsBackground, thread.IsThreadPoolThread, thread.ManagedThreadId));