vlambda博客
学习文章列表

[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,我异步执行完了"; });}

[C#] 异步编程async/await测试笔记

如果再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,我异步执行完了"; });}