[C#] 异步编程async/await测试笔记
Async await
方法使用Async修饰符修饰.
返回类型仅有三种: void,Task,Task<T>
方法内部使用await关键字标明开始执行异步代码
await标志前的代码是同步执行,await标志的方法是异步执行,await标志的方法后面的代码相当于"回调函数",在await标志的异步方法后面执行.
所以使用Async await异步编程之后代码的执行顺序会变成上图所示。
直接搞一个测试程序:
XTrace.WriteLine("我是主线程!");XTrace.WriteLine("准备调用异步方法AsyncTask.");AsyncTask();//调用Async修饰的方法XTrace.WriteLine("我是主线程,继续执行。。。。.");XTrace.WriteLine("我是主线程,完工!");Console.ReadLine();//Async修饰的方法async Task AsyncTask(){XTrace.WriteLine($"我是方法AsyncTask");var result = await WasteTime();XTrace.WriteLine(result);XTrace.WriteLine("我是方法AsyncTask,完工!");}async Task<string> WasteTime(){return await Task.Run(() =>{Thread.Sleep(1);//避免XTrace.WriteLine执行太快使整个程序执行起来像是同步执行的XTrace.WriteLine("我是WasteTime,开始异步执行了!");XTrace.WriteLine("我是WasteTime,我正在摸鱼。。。。");Thread.Sleep(5000);return "我是WasteTime,我异步执行完了";});}
如果再AsyncTask()加一个await ,逻辑就变了。
XTrace.WriteLine("我是主线程!");XTrace.WriteLine("准备调用异步方法AsyncTask.");await AsyncTask();//调用Async修饰的方法XTrace.WriteLine("我是主线程,继续执行。。。。.");XTrace.WriteLine("我是主线程,完工!");Console.ReadLine();//Async修饰的方法async Task AsyncTask(){XTrace.WriteLine($"我是方法AsyncTask");var result = await WasteTime();XTrace.WriteLine(result);XTrace.WriteLine("我是方法AsyncTask,完工!");}async Task<string> WasteTime(){return await Task.Run(() =>{Thread.Sleep(1);//避免XTrace.WriteLine执行太快使整个程序执行起来像是同步执行的XTrace.WriteLine("我是WasteTime,开始异步执行了!");XTrace.WriteLine("我是WasteTime,我正在摸鱼。。。。");Thread.Sleep(5000);return "我是WasteTime,我异步执行完了";});}
