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