用来执行异步方法的语法糖。
用async来修饰一个方法,表明这个方法是异步的,声明的async方法的返回类型必须为:void或Task或Task
被await修饰的只能是Task或者Task
在很多包里面都能看到异步的方法,方法的后缀async结尾,比如网络请求的类,EF,读取文件等。
原理如下:
把耗费时间的方法装到Task里面,执行这个Task就相当于新开了一个线程去并行执行。
用async关键之声明一个异步方法,在这个异步方法里面用await关键之 等任务Atask完成。
在主线程里面直接调用异步方法Aasync,这些异步方法开的新线程,全部并行。(我试过,并行的任务多了,无法做到几十线程并行,后面的等有空线程了去抢线程,执行)
以上async对异步任务进行了封装,其实不用async异步方法,直接调用Atask();一样的。
static void Main(string[] args){DateTime s = DateTime.Now;Aasync();Aasync();Aasync();Aasync();Aasync();Aasync();Aasync();Aasync();DateTime e = DateTime.Now;Console.WriteLine($"花费时间{(e-s).TotalMilliseconds}毫秒");Console.ReadKey();}//封装好的异步方法,微软现成的库里面就有很多async结尾的方法async static void Aasync(){await Atask();}//这是一个特别花时间的任务,可以把他当作读取文件,网络请求,写入数据等static Task Atask(){return Task.Run(()=> {Thread.Sleep(5000);Console.WriteLine("等了5秒");});}//打印结果//花费时间8.3136毫秒//等了5秒//等了5秒//等了5秒//等了5秒//等了5秒//等了5秒//等了5秒//等了5秒//以上等了5秒差不多就是5秒后一起出来的
