What's 异步方法

语法分析:

(1)关键字:方法头使用async修改。

(2)要求:包含N(N>0)个await表达式,表示需要异步执行的任务。如果没有包含await表达式,就与普通方法无异了。

(3)返回类型:只能返回3种类型(void、Task、Task<T>)。

(4)参数:数量不限,但不能使用 out 和 ref 关键字。

(5)命名约定:方法后缀名应以 Async 结尾。

async/await 的具体使用。

 1 namespace 异步
 2 {
 3     class Program
 4     {
 5         //创建计时器
 6         private static readonly Stopwatch Watch = new Stopwatch();
 7 
 8         private static void Main(string[] args)
 9         {
10             //启动计时器
11             Watch.Start();
12 
13             const string url1 = "http://www.cnblogs.com/";
14             const string url2 = "http://www.cnblogs.com/liqingwen/";
15 
16             //两次调用 CountCharacters 方法(下载某网站内容,并统计字符的个数)
17             Task<int> t1 = CountCharacters(1, url1);
18             Task<int> t2 = CountCharacters(2, url2);
19 
20             //三次调用 ExtraOperation 方法(主要是通过拼接字符串达到耗时操作)
21             for (var i = 0; i < 3; i++)
22             {
23                 ExtraOperation(i + 1);
24             }
25 
26             //控制台输出
27             Console.WriteLine("{0} 的字符个数: {1}", url1, t1.Result);
28             Console.WriteLine("{0} 的字符个数: {1}", url2, t2.Result);
29 
30             Console.Read();
31         }
32 
33         /// <summary>
34         /// 统计字符个数
35         /// </summary>
36         /// <param name="id"></param>
37         /// <param name="address"></param>
38         /// <returns></returns>
39         private static async Task<int> CountCharacters(int id, string address)
40         {
41             var wc = new WebClient();
42             Console.WriteLine("开始调用 id = {0}:{1} ms", id, Watch.ElapsedMilliseconds);
43 
44             var result = await wc.DownloadStringTaskAsync(address);
45 
46             Console.WriteLine("调用完成 id = {0}:{1} ms", id, Watch.ElapsedMilliseconds);
47 
48             return result.Length;
49         }
50 
51         /// <summary>
52         /// 额外操作
53         /// </summary>
54         /// <param name="id"></param>
55         private static void ExtraOperation(int id)
56         {
57             //这里是通过拼接字符串进行一些相对耗时的操作
58             var s = "";
59 
60             for (var i = 0; i < 6000; i++)
61             {
62                 s += i;
63             }
64 
65             Console.WriteLine("id = {0} 的 ExtraOperation 方法完成:{1} ms", id, Watch.ElapsedMilliseconds);
66         }
67     }
68 }

 

posted on 2016-09-08 10:22  JustYong  阅读(259)  评论(0编辑  收藏  举报