关于 async 与 await的个人理解
async 与 await是一种能够快速编写异步程序的方式
async为方法的修饰符,表示该类可以进行异步操作,await只能存在于异步方法中
1 static void Main(string[] args) 2 { 3 Console.WriteLine("-------主线程启动-------"); 4 var m = GetLengthAsync(); 5 Console.WriteLine("Main方法做其他事情"); 6 //var m = task.Result; 7 // m.Wait(); 8 Console.WriteLine("Main方法做其他事情2"); 9 Console.WriteLine("Task返回的值"); 10 Thread.Sleep(4000); 11 Console.WriteLine("-------主线程结束-------"); 12 Console.ReadKey(); 13 } 14 static async Task GetLengthAsync() 15 { 16 Console.WriteLine("GetLengthAsync Start"); 17 await GetStringAsync(); 18 Thread.Sleep(3000); 19 Console.WriteLine("GetLengthAsync End"); 20 // m.Wait(); 21 22 //return str.Length; 23 } 24 25 static Task GetStringAsync() 26 { 27 return Task.Run(() => { Thread.Sleep(2000); Console.WriteLine("haha"); }); 28 }
一开始按照同步的方式进行,进如getlengthAsync方法,进行到await修饰符的方法时,后面的方法与主线程异步进行 5行开始进行 当17完成时,继续进行18、19的操作与主线程异步进行 11停留4秒 19总共停留5秒,因此19约比11晚1秒出现
既 异步方法中遇到await关键字时,await后面所有的都以异步的形式进行下去