异步编程的认识

目录

一、异步编程的使用目的 

1.异步编程的概念

2.异步方法

3.使用异步方法

4.如果不使用 await 关键字会怎样


一、异步编程的使用目的 

1.异步编程的概念

以点餐为例。饭店的两种点餐方式。

一种是服务员一对一服务,站在客人身边等客人一个一个点好餐,服务员一个一个记录,然后将记录好的餐送去后厨进行炒制。

一种是服务员将菜单递至客人手中,客人点好餐后将单子拿给服务员。

相比之下,第二种点餐方式可以提高服务员的工作效率,效率会更高一点。但此种方式并不一定能提高客人用餐的效率,只能提高服务员的工作效率。

在后厨加工的过程中,也可用异步编程的方式实现,比如一些小工负责洗菜择菜等环节,也可加速上菜的进度。

 就像 web 开发,web服务器是来处理 user 浏览器的请求的,但是 web 服务器不能直接处理请求,它会把请求转发给 web 程序,由 web 把请求处理完成后把相应的结果返回给 web 服务器,再由 web 服务器将结果返回给 user 浏览器。

由于 web 服务器一次性同时处理请求的 user 浏览器个数有限,所以 web 服务器接收足够的 user 浏览器后就会回绝后来新来的用户请求,继续等待请求完成,效率慢。但是如果执行异步编程的话, web 服务器一次接收完后将请求马上响应给 web 程序,之后就立马去接收新的请求,等 web程序将请求处理完成后再将处理结果返回给 user 浏览器,这样执行的话效率增高。

异步编程并不能加快单个请求的处理速度,只是增加了 web 服务器的处理 user 浏览器数量。

2.异步方法

异步方法指用 async 关键字修饰的方法。

1.异步方法的返回值一般是 Task<T>,T是真正的返回值类型,Task<int>表示这个方法真正的返回值类型为 int 。惯例:异步方法命名一班建议以 Async 结尾。(Task 是类型,T 是泛型)

2.即使方法没有返回值,也最好把返回值声明为非泛型的 Task 。

3.调用异步方法时,一般在方法前加上 await 关键字,这样拿到的返回值就是泛型指定的 Task<T>类型。

4.异步方法的传染性:一个方法中如果有 await 调用,则这个方法也必须修饰为 async 。

因为 Test01Asycn 调用了 Test02Async 方法,且为 await 调用,则 Test01Async 必须得是 async 修饰的方法。一个方法用  await 调用了异步方法,则这个方法也得是 用 async 修饰。

3.使用异步方法

* 定义变量的时候在前添加 @ 字符后可以不用 转义字符再进行转义。

同步方法:

 运行结果为:

 异步方法:

 运行结果为:

4.如果不使用 await 关键字会怎样

如果不写 await 关键字的话,上述代码流程中,在写入文件内容的同时就开始读文件内容的步骤了。

如果写入一个比较大的文件的内容时候就容易出错 。

没有用 await 关键字的时候文件在写入的同时是无法停下来执行被读的步骤的。所以会出错。

await 的作用就是等它执行完这一步之后就开始下一步,而不是等它执行完这一步骤的所有操作后再执行下一步骤。

猜你喜欢

转载自blog.csdn.net/2201_75837601/article/details/128462230