小小一方士 C# Async\Await

思考如下代码输出结果:

 1                 Func<int, Task<int>> function = async x =>
 2                 {
 3                     Console.WriteLine(x);
 4                     await Task.Delay(x * 1000);
 5                     Console.WriteLine($"{x}-qweqwe");
 6                     return x * 2;
 7                 };
 8                 Stopwatch st = new Stopwatch();
 9                 st.Start();
10                 Task<int> first = function(5);
11                 Task<int> second = function(2);
12 
13                 Console.WriteLine(first.Result);
14                 Console.WriteLine(second.Result);
15                 st.Stop();
16                 Console.WriteLine(st.ElapsedMilliseconds);

输出结果:

思考.总结:

1.首先从所用时间"5018"确实可以看出异步得作用;

2.async 是基于任务得异步;

3.对于输出结果,变换一下代码配合其结果更易于理解;

改变后

输出结果

4.注意async和await得用法:

           a.简单理解为,async修饰时,标识这是一个异步方法,当遇见await时进行阻塞主线程异步执行,在未遇见await,不会进行异步处理;

           b.async修饰下得方法,必需含有至少一个await,虽然不含await时编译器仍能通过,但会  

所以i,这点需要注意;

            c.此段代码给出了如何编写底层异步方法(如果想要异步编程,需要从底层开始编写,这样后边使用的时候就是异步)的demo;又如下面代码:

 1     async Task<int> Sum(int a, int b)
 2         {
 3             Console.WriteLine("di 0");
 4             if (a == 0 && b == 0)
 5             {
 6                 Console.WriteLine("di x");
 7                 return 0;
 8             }
 9             return await Task.Run(async () =>
10             {
11                 Console.WriteLine("di 1");
12                 await Task.Delay(2000);
13                 Console.WriteLine("di 2");
14                 return a + b;
15             });
16         }

 

posted @ 2019-06-27 10:17  L-Harrison  阅读(188)  评论(0编辑  收藏  举报