zoukankan      html  css  js  c++  java
  • regex & async & await

    1.regex

    Regex re = new Regex("abc");

    我的理解是:对“abc”这个字符进行代换或者判断...,即将“abc”当做关注点。

    关于正则表达式,有一些code较为常用。

    #1忽略大小写的功能RegexOptions.IgnoreCase

     3                 string str1 = "hello";
     4                 string str2 = "HeLLo";
     5                 Regex re = new Regex("hello", RegexOptions.IgnoreCase);
     6                 if(re.IsMatch(str1))
     7                 {
     8                     Console.WriteLine("it is match!");
     9                 }
    10                 if (re.IsMatch(str2))
    11                 {
    12                     Console.WriteLine("it is match,too!");
    13                 }

    输出为:

    #2 替换功能Regex.Replace()

    1                 string str1 = "123abc321AbC123";
    2                 Console.WriteLine("before replace:{0}", str1);
    3                 Regex re = new Regex("abc", RegexOptions.IgnoreCase);
    4                 string newStr = re.Replace(str1, "|");
    5                 Console.WriteLine("after replace:{0}",newStr);

    输出为:

    #3.匹配IP地址

     1 string str1 = "04:09:54 111.13.100.91 www.baidu.com" 
     2                            + "05:22:23 112.25.24.135 www.sohu.com "
     3                             + "08:09:11 23.200.221.15 www.apple.com";
     4                 Regex re = new Regex(@"(?<time>(d|:)+)s" +
     5                                      @"(?<ip>(d|.)+)s" +
     6                                      @"(?<site>S+)");
     7                 MatchCollection matches = re.Matches(str1);
     8                 foreach(Match match in matches)
     9                 {
    10                     if(match.Length != 0)
    11                     {
    12                         Console.WriteLine("
    matches: {0}", match.ToString());
    13                         Console.WriteLine("time: {0}", match.Groups["time"]);
    14                         Console.WriteLine("ip: {0}", match.Groups["ip"]);
    15                         Console.WriteLine("site: {0}", match.Groups["site"]);
    16                     }
    17                 }

    结果:

    2.async & await

    这是两个关键字,用于异步编程。像写同步方法一样去写异步方法。async关键字能用在方法、lambda表达式的声明部分,用来标示此方法可能包含await关键字,只有拥有async才能在其内部使用await关键字。当一个async方法,且内部包含await关键字,它就会在编译的时候成为一个异步方法,如果没有await关键字,则它将只会被当成一个同步方法来执行。

    下面是从网上查找到,普通同步与用了async & await的异步的比较程序。(自己加了程序运行时间)

    先是同步:

     1 static void Main(string[] args)
     2             {                                                              
     3                 DateTime d1 = DateTime.Now;
     4                 // 同步方式
     5                 Console.WriteLine("同步方式测试开始!");
     6                 SyncMethod(0);
     7                 Console.WriteLine("同步方式结束!");
     8                
     9                 DateTime d2 = DateTime.Now;
    10                 Console.WriteLine("花费时间为:{0}",d2-d1);
    11             
    12             }
    13             // 同步操作
    14             private static void SyncMethod(int input)
    15             {
    16                 Console.WriteLine("进入同步操作!");
    17                 var result = SyancWork(input);
    18                 Console.WriteLine("最终结果{0}", result);
    19                 Console.WriteLine("退出同步操作!");
    20             }
    21             // 模拟耗时操作(同步方法)
    22             private static int SyancWork(int val)
    23             {
    24                 for (int i = 0; i < 5; ++i)
    25                 {
    26                     Console.WriteLine("耗时操作{0}", i);
    27                     Thread.Sleep(100);
    28                     val++;
    29                 }
    30                 return val;
    31             }

    结果:

    然后是异步:

     1 static void Main(string[] args)
     2             {
     3                 // 异步方式
     4                 DateTime d1 = DateTime.Now;
     5                 Console.WriteLine("
    异步方式测试开始!");
     6                 AsyncMethod(0);
     7                 Console.WriteLine("异步方式结束!");
     8                 Console.ReadKey();
     9                 DateTime d2 = DateTime.Now;
    10                 Console.WriteLine("程序运行时间:{0}",d2-d1);
    11             }
    12 
    13             // 异步操作
    14             private static async void AsyncMethod(int input)
    15             {
    16                 Console.WriteLine("进入异步操作!");
    17                 var result = await AsyncWork(input);
    18                 Console.WriteLine("最终结果{0}", result);
    19                 Console.WriteLine("退出异步操作!");
    20             }
    21 
    22             // 模拟耗时操作(异步方法)
    23             private static async Task<int> AsyncWork(int val)
    24             {
    25                 for (int i = 0; i < 5; ++i)
    26                 {
    27                     Console.WriteLine("耗时操作{0}", i);
    28                     await Task.Delay(100);
    29                     val++;
    30                 }
    31                 return val;
    32             }

    结果为:

    由结果可知,耗时操作此事已变成异步进行了,即并不会等待下面的AsyncWork完成其耗时操作,先返回main函数,然后再进行耗时操作。经过比较可知,二者程序结构一样,只是异步的多了两个关键字async & await,就可以用写同步的方法来写异步程序了。

    over

  • 相关阅读:
    postgresql清理工具
    Vue 创建项目
    Vue3 项目打包
    Oracle Linux7 与Oracle Linux8 下载rpm包的位置
    PostgreSQL 关闭session链接,删除数据库方法(转载)
    浅析状态机模式的理解以及如何使用状态机模式简化代码里复杂的 if else 逻辑
    浅析黑盒/白盒测试用例的基本设计方法:等价类划分法、临界值分析法、错误推测法、因果图法
    浅析设计测试用例的四条原则:单个用例覆盖最小化原则、测试用例替代产品文档功能原则、单次投入成本和多次投入成本原则、使测试结果分析和调试最简单化原则
    浅析软件测试中的一些常见理论:杀虫剂效应、金字塔模型、缺陷集群性原则、软件测试活动依赖于软件测试背景、软件测试的7大基本原则
    golang var xx struct定义struct类型变量?
  • 原文地址:https://www.cnblogs.com/3013218071zjr/p/4434172.html
Copyright © 2011-2022 走看看