运行以下代码:
static void Main(string[] args) { Task t = TaskTest(); } private static async Task TaskTest() { await DoWork(); Console.WriteLine("TaskTest"); } private static async Task DoWork() { Console.WriteLine("Hello World!"); for (int i = 0; i < 3; i++) { await Task.Delay(1000); Console.WriteLine("Working...{0}", i); } }
运行结果如下:
结论:
1.异步方法被标记async
2.被标记async的方法必须使用await关键字,重点是await
当方法运行时遇到某个await关键字,编译器会开辟一个独立的线程,将其后的运行代码会放入该线程中运行。
3.代码执行分析
static void Main(string[] args) { //程序入口 Task t = TaskTest();//进入TaskTest() } private static async Task TaskTest() { await DoWork();//遇到await,执行DoWork(),开辟一个新线程执行之后的Console.WriteLine("TaskTest");代码 Console.WriteLine("TaskTest"); } private static async Task DoWork() { Console.WriteLine("Hello World!");//在控制台输出“Hello Wrold!” for (int i = 0; i < 3; i++) { await Task.Delay(1000);//遇到await,执行Task.Delay(1000),开辟一个新线程执行之后的代码 Console.WriteLine("Working...{0}", i); } }
依据以上的代码执行分析,控制台最终只会打印出“Hello World!”。