• async/await


    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 }
  • 相关阅读:
    node03- FS内置模块
    node03- CommonJS
    删除当前目录下的所有文件夹和文件
    解决 idea 项目中Error:java: 无效的标记
    Raid0,Raid1,Raid5,Raid10 总结
    Tcpdump命令
    ClassNotFoundException 和 NoClassDefFoundError 区别
    Dart-List里面常用的属性和方法
    CSS实现等分布局的4种方式
    iOS项目添加CocoaPods
  • 原文地址:https://www.cnblogs.com/JustYong/p/5852044.html
Copyright © 2020-2023  润新知