ASP.NET Core 6.0 学习笔记(B站杨中科版)(二)

第一章:Nuget与异步编程(二)——什么是异步编程

一、 为什么要使用异步编程

本质:IO跟不上CPU,拖慢程序运行进程

关键字:async await

上面两个关键字只是编译器功能,编译器会使用Task类创建代码。若不使用这两个关键字,则使用Task类也可以完成相关功能

注:异步不等于多线程

二、async、await的基本使用
  1. 异步方法
    1. 什么是异步方法:通常是借助于线程或任务,在后台运行的方法,并不会阻塞调用线程。通俗来说就是异步方法借助这两个关键字格外开了一个线程去执行方法体内的代码。
    2. 异步方法的返回值一般是Task<T>,T是真正的返回值类型,若返回值为void,则将Task<T>换为Task,即使是Main()方法也要返回Task;
  2. 命名惯例:以Async结尾。如getMethodAsync();
  3. 调用泛型方法时,一般在方法前面添加await关键字。这样拿到的返回值就是由泛型指定的T类型
  4. 异步方法的“传染性”:一个方法中若有await调用,则这个方法必须修饰为async。
  5. async、await关键字:
    1. async用于修饰异步方法。即,被async修饰的方法是异步方法,支持异步调用。但是,这个方法也可以同步调用,至于是异步调用还是同步调用,则由关键字await控制
    2. await关键字可以用来调用异步方法,若不使用await关键字,则默认被调用的方法是同步方法。若被调用方法是异步方法,则在同步调用时主线程不会等待子线程

      用异步的原因:承受更大的并发量

      如,我们删去await关键字,构建一个较大的字符串,然后直接向这个文件中写入字符串而不使用await,结果如下:

     

       报错信息为“该进程无法访问文件‘D:\code\test.txt’因为它被另一个进程占用”。其实所谓的“另一个进程”就是该程序本身。File.WriteAllTextAsync()方法默认独占式写入,但是这里还没有写入完成,程序的子线程还在占用该文件进行写操作。此时程序就继续向下执行(非异步,即子线程还在占用文件写入,但主线程不等待子线程),导致资源挤占而报错

        修正:添加await,这样主线程就会等待写入子线程执行完毕后在执行,不再报错:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GISer_Qing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值