GetAwaiter和GetResult(2)
namespace ConsoleApp1 { class Program { /// 示范 GetAwaiter() /// tip: 关键字: wait系列, await, result, getResult 要等, 其他都不用 static void Main(string[] args) { var task = RunAsync_1(); //OnCompleted:对象停止等待 ,异步任务完成去执行下面。。。的task.Result。 task.GetAwaiter().OnCompleted(() => { Console.WriteLine("。。。。。。"+task.Result); }); //这个task.GetAwaiter().GetResult()等价于上面OnCompleted+task.Wait() //task.Wait()这个标志是要等到异步程序执行完再去执行其他的 //Console.WriteLine(task.GetAwaiter().GetResult()); task.Wait(); //要等 Console.WriteLine("a-我会先跑");//这里有两个a和b, 当代码从上面走到这两行的时候直接运行,但是呢,这两行下面是task.Wait().就是要等待了。 Console.WriteLine("b我会先跑");// //task.Wait(); //要等 Console.WriteLine("1-我会先跑"); //task.Wait(); //要等 Wait():等待系统线程化任务完成执行的任务,这个就是要等待异步线程走完结束,才会继续下去 Console.WriteLine("上面RunAsync_1执行完了。。。。。。。。"); var result = RunAsync_2().GetAwaiter().GetResult(); //要等 这个GetResult本身就是要等待异步执行完毕,再会去执行其他的东西 Console.WriteLine(result); Console.WriteLine("4-这次不会先跑了"); Console.Read(); } static async Task<string> RunAsync_1() { await Task.Delay(10000); //要等 return "2-处理数据需要一些时间"; } static async Task<string> RunAsync_2() { await Task.Delay(1000); //要等 return "3-处理数据需要一些时间"; } } }
人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。