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("\nmatches: {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("\n异步方式测试开始!");
 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

时间: 2024-10-11 08:13:11

regex & async & await的相关文章

ASP.NET WebForm中用async/await实现异步出人意料的简单

1. 在.aspx中添加异步标记 <%@ Page Language="C#" Async="true"%> 2. 在.aspx.cs或者.ascx.cs(用户控件)中添加异步方法 private async Task GetMyPosts() { var posts = await ServiceFactory.BlogPostSevice.GetBlogPostsPagedAsync(); rpPosts.DataSource = posts; rp

Javascript中的async await

async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案.目前,async / await这个特性已经是stage 3的建议,可以看看TC39的进度,本篇文章将分享async / await是如何工作的,阅读本文前,希望你具备Promise.generator.yield等ES6的相关知识. 在详细介绍async / await之前,先回顾下目前在ES6中比较好的异步处理办法.下面的例子中数据请求用Node.js中的request模块,数据接口采用Github v3

Async Await异步调用WebApi

先铺垫一些基础知识 在 .net 4.5中出现了 Async Await关键字,配合之前版本的Task 来使得开发异步程序更为简单易控. 在使用它们之前 我们先关心下 为什么要使用它们.好比 一个人做几件事,那他得一件一件的做完,而如果添加几个人手一起帮着做 很显然任务会更快的做好.这就是并行的粗浅含义. 在程序中,常见的性能瓶颈在于 NetWork I/O 瓶颈 , CPU 瓶颈, 数据库I/O瓶颈,这些瓶颈使得我们的程序运行的很慢,我们想办法去优化.因为并行开发本身就加重CPU负担,所以一般

C# async/await 使用总结

今天搞这两个关键字搞得有点晕,主要还是没有彻底理解其中的原理.   混淆了一个调用异步方法的概念: 在调用异步方法时,虽然方法返回一个 Task,但是其中的代码已经开始执行.该方法在调用时,即刻执行了一部分代码,直接最底层的 Async API 处才产生真正的异步操作,这时向上逐步返回,并最终使用一个 Task 来代表该异步任务. 当不使用 await 关键字时,该异步方法同样在异步执行.而使用 await 关键字后,只不过是对 Task(awaitable) 对象异步等待其执行结束,然后再同上

[Node] Catch error for async await

When we try to do MongoDB opration, mongoose return Promise, we can use async/await to simply the code: const mongoose = require('mongoose'); const Store = mongoose.model('Store'); exports.createStore = async (req, res) => { const store = new Store(r

.NET 中的 async/await 异步编程

前言 最近在学习Web Api框架的时候接触到了async/await,这个特性是.NET 4.5引入的,由于之前对于异步编程不是很了解,所以花费了一些时间学习一下相关的知识,并整理成这篇博客,如果在阅读的过程中发现不对的地方,欢迎大家指正. 同步编程与异步编程 通常情况下,我们写的C#代码就是同步的,运行在同一个线程中,从程序的第一行代码到最后一句代码顺序执行.而异步编程的核心是使用多线程,通过让不同的线程执行不同的任务,实现不同代码的并行运行. 前台线程与后台线程 关于多线程,早在.NET2

async await

1.BookDAL 有一个产生string 的方法 public string GetTestString() { string sReturn = ""; string[] sList = { "a", "b", "c", "d", "e", "f","g","h","i","j",&q

你眼中的async/await是什么样的呢?

又到了周末的code review环节,这次code review发现了一个对async/await的理解问题.让我们直奔主题: var foodsSearch = new FoodSearchService().Search(); var fruitsSearch = new FruitSearchService().Search(); var foods = await foodsSearch; foods.ForEach(f => Console.WriteLine("food:{0

折腾 async/await 调用传统 Begin/End 异步方法

最近在改进园子的图片上传程序,希望实现用户上传图片时同时将图片文件保存在三个地方:1)服务器本地硬盘:2)又拍云:3)阿里云OSS.并且在保存时使用异步操作. 对于异步保存到本地硬盘,只需用 Steam.CopyToAsync() 将上传文件流异步复制到 FileStream 即可. 对于异步保存至又拍云,只要借助 WebRequest.GetRequestStreamAsync() + Steam.CopyToAsync() 就可以实现. 而阿里云OSS提供了 .NET SDK,使用起来很方便