.net Core异步async和await
异步编程
await特点
实例
异步编程
在.NET中新增了异步编程的新特性async和await,使得异步编程更为简单。通过特性可以将这项复杂的工作交给编译器来完成了。之前传统的方式来实现异步编程较为复杂,这样对于程序员来说处理起来比较困难,调试也没那么方便,后续的维护工作也比较痛苦。
Async和Await关键字是C#异步编程的核心。通过使用这两个关键字,你可以使用.NET Framework 或 Windows Runtime的资源创建一个异步方法如同创建一个同步方法一样容易。
await特点
1、await 运算符应用于异步方法中的任务,在方法的执行中插入挂起点,直到所等待的任务完成。
任务表示正在进行的工作。
2、await 仅可用于由 async 关键字修改的异步方法中。
使用 async 修饰符定义并且通常包含一个或多个 await 表达式的这类方法称为异步方法。
3、await 真正的目的只有一个 在调用异步方法 XXAsync() 时挂起此方法,它认为这个方法是比较耗时的方法,主线程或调用此方法的线程不要在此方法等待。
并同时作个标记,当前执行的线程运行结束时,将由此处恢复运行,所以在await 标记的异步方法下面的代码或方法将不能运行,必须等待这个方法完成!
4、加不加 await 与 方法是异步还是同步的并没有关系
实例
/// <summary>
/// 同步方法打印Hello World
/// </summary>
public static void PrintHelloWorld()
{
Console.WriteLine("同步方法调用开始");
Console.WriteLine("同步方法:Hello World");
Thread.Sleep(1000);
Console.WriteLine("退出同步方法");
}
/// <summary>
/// 异步方法打印Hello World
/// </summary>
public async static void AsyncPrintHelloWorld()
{
Console.WriteLine("异步方法调用开始");
Console.WriteLine("异步方法:Hello World");
await Task.Delay(1000);
Console.WriteLine("退出异步方法");
}
上面注释中也有进行说明,第一个是同步方法,第二个是异步方法。同步方法可以通过Thread.Sleep(1000);暂停方法执行1000ms,同样的异步方法可以通过await Task.Delay(1000)来处理,而且在异步方法的声明中要加入async的关键字。
接下来是简单的调用
static void Main(string[] args)
{
Console.WriteLine("======同步方法调用=====");
PrintHelloWorld();
Console.WriteLine("同步方法调用结束");
Console.WriteLine("======异步方法调用=====");
AsyncPrintHelloWorld();
Console.WriteLine("异步方法调用结束");
Console.ReadLine();
}
结果如下