一、简介
在这最后一部分,记录一下async/awaite这一组关键字的用法, async/await这一组关键字是在.net framework 4.5开始才有的,async 是用来修饰方法,await用于方法内部等待异步的完成,若在只使用async而未使用await则该方法会以同步的方式执行,所以尽量将async/await成对使用。
二、使用
2.1 在异步方法中,当程序执行到await时,先进入方法,将属于当前线程的语句全部执行,异步计算会放在线程池中计算
public static void Main() { Test1();//1 Console.WriteLine("end");//2 } private static async Task Test1() { Console.WriteLine("开始");//3 await Test2();//4 Console.WriteLine("结束");//5 } private static async Task Test2() { Console.WriteLine("开始2"); //6 await Task.Delay(3000);//7 Console.WriteLine("结束2");//8 }
执行结果: 开始 开始2 end 结束2 结束
程序刚开始执行时,进入方法Test1(),执行Console.WriteLine("开始"),然后进入方法Test2(),执行Console.WriteLine("开始2"),当遇到异步方法await Task.Delay(3000)时,程序回到await Test2(),因为这里也有await 修饰,所以当前线程回到Main()中继续向下执行Console.WriteLine("end"),当异步方法Task.Delay(3000)执行完毕,则当前线程接着执行await 下面的程序 Console.WriteLine("结束2"),执行完Test2()则回到Test1()向下执行Console.WriteLine("结束")
2.2 带返回值的异步Task
private static async Task<int> GetSumAsync(int count) { int sum = 0; await Task.Run(() => { for (int i = 0; i < count; i++) { Thread.Sleep(500); sum += count; } }); return sum; } public static void Main() { int sum = await GetSumAsync(10); Console.WriteLine(sum);//打印计算结果 }
标签:异步,Task,Console,C#,await,WriteLine,async,多线程 From: https://www.cnblogs.com/just-like/p/16912918.html