using System;
using System.Threading;
using System.Threading.Tasks;
public class Test {
public static void Main() {
OutputThreadID("Main A");
Async1().Wait();
OutputThreadID("Main B");
Async2().Wait();
OutputThreadID("Main C");
}
private static async Task Async1() {
OutputThreadID("Async1 A");
await Task.Delay(100);
OutputThreadID("Async1 B");
}
private static async Task Async2() {
OutputThreadID("Async2 A");
await Task.Delay(100).ConfigureAwait(true);
OutputThreadID("Async2 B");
}
private static void OutputThreadID(string name) {
Console.WriteLine($"{name}(ID={Thread.CurrentThread.ManagedThreadId})");
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwoKcHVibGljIGNsYXNzIFRlc3QgewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKSB7CgkJT3V0cHV0VGhyZWFkSUQoIk1haW4gQSIpOwoJCUFzeW5jMSgpLldhaXQoKTsKCQlPdXRwdXRUaHJlYWRJRCgiTWFpbiBCIik7CgkJQXN5bmMyKCkuV2FpdCgpOwoJCU91dHB1dFRocmVhZElEKCJNYWluIEMiKTsKCX0KCXByaXZhdGUgc3RhdGljIGFzeW5jIFRhc2sgQXN5bmMxKCkgewoJCU91dHB1dFRocmVhZElEKCJBc3luYzEgQSIpOwoJCWF3YWl0IFRhc2suRGVsYXkoMTAwKTsKCQlPdXRwdXRUaHJlYWRJRCgiQXN5bmMxIEIiKTsKCX0KCXByaXZhdGUgc3RhdGljIGFzeW5jIFRhc2sgQXN5bmMyKCkgewoJCU91dHB1dFRocmVhZElEKCJBc3luYzIgQSIpOwoJCWF3YWl0IFRhc2suRGVsYXkoMTAwKS5Db25maWd1cmVBd2FpdCh0cnVlKTsKCQlPdXRwdXRUaHJlYWRJRCgiQXN5bmMyIEIiKTsKCX0KCXByaXZhdGUgc3RhdGljIHZvaWQgT3V0cHV0VGhyZWFkSUQoc3RyaW5nIG5hbWUpIHsKCQlDb25zb2xlLldyaXRlTGluZSgkIntuYW1lfShJRD17VGhyZWFkLkN1cnJlbnRUaHJlYWQuTWFuYWdlZFRocmVhZElkfSkiKTsKCX0KfQo=