杨中科 .NETCORE 异步编程

这篇具有很好参考价值的文章主要介绍了杨中科 .NETCORE 异步编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、 为什么需要异步编程

杨中科 .NETCORE 异步编程,ASP.NET,.netcore

异步点餐的优点:能同时服务多个客人

异步点餐一定会提升单个客户点餐速度吗?
答案理所当然:不能

图片美化服务例子服务器能够同时服务的请求数量有限

void BeautifyPic (File photo, Response response)
{
	byte[] bytes = 美化图片(photo);
	response.Write(bytes):
}

杨中科 .NETCORE 异步编程,ASP.NET,.netcore
处理完成后再回调,异步回调通知的。就可以同时处理更多的请求

传统多线程开发太麻烦。C#关键字;
async、await。async、await不等于“多线程

二、async await 基本使用

“异步方法”:用async关键字修饰的方法
1、异步方法的返回值一般是Task,T是真正的返回值类型,Task。惯例: 异步方法名字以Async结尾。
2、即使方法没有返回值,也最好把返回值声明为非泛型的Task。
3、调用泛型方法时,一般在方法前加上await关,这样拿到的返回值就是泛型指定的T类型
4、异步方法的“传染性”:一个方法中如果有await调用,则这个方法也必须修饰为async(其他都是同步方法,只要有一句异步,这个方法就必须修饰未async)

static async Task Main(string[] args)
{
   string fileName = "d:/1.txt"File.Delete(fileName);
   File.WriteAllTextAsync(fileName, "hello async");
   string 	s = await File.ReadAllTextAsync(fileName);
   Console.Writeline(s);
}

试一试异步

新建控制台应用

杨中科 .NETCORE 异步编程,ASP.NET,.netcore
杨中科 .NETCORE 异步编程,ASP.NET,.netcore

同步方式

杨中科 .NETCORE 异步编程,ASP.NET,.netcore

运行结果:

杨中科 .NETCORE 异步编程,ASP.NET,.netcore

异步方式

此时主方法需要改为

杨中科 .NETCORE 异步编程,ASP.NET,.netcore
杨中科 .NETCORE 异步编程,ASP.NET,.netcore

若去掉await

杨中科 .NETCORE 异步编程,ASP.NET,.netcore

此时文件 也能生成(留下疑问)

杨中科 .NETCORE 异步编程,ASP.NET,.netcore

读取的两种方式 ,第一种会自动转换(是第二种的两句合并)
杨中科 .NETCORE 异步编程,ASP.NET,.netcore
不加await 运行效果 是因为 写入hello 字符得速度很快
尝试加入 大字符
杨中科 .NETCORE 异步编程,ASP.NET,.netcore

运行
杨中科 .NETCORE 异步编程,ASP.NET,.netcore

WriteAllTextAsync == 独占式写入==,正在写的途中是不能 读出数据
不写await 是启动写入后,不等写完 就继续执行下面的语句

因为第二行代码是异步,可能会先于第一行执行,要么都异步,要么都同步

加入await之后:
杨中科 .NETCORE 异步编程,ASP.NET,.netcore

运行结果:
杨中科 .NETCORE 异步编程,ASP.NET,.netcore

三、编写异步方法

不带返回值

杨中科 .NETCORE 异步编程,ASP.NET,.netcore

运行:

杨中科 .NETCORE 异步编程,ASP.NET,.netcore

查看文件:
杨中科 .NETCORE 异步编程,ASP.NET,.netcore

带返回值

杨中科 .NETCORE 异步编程,ASP.NET,.netcore
杨中科 .NETCORE 异步编程,ASP.NET,.netcore

运行结果:

杨中科 .NETCORE 异步编程,ASP.NET,.netcore

【注意】
如果同样的功能,既有同步方法,又有异步方法,那么首先使用异步方法。 .NET5中,很多框架中的方法也都支持异步:Main、WinForm事件处理函数。

对于不支持的异步方法怎么办? Wait()(无返回值);Rest(有返回值)。
风险:死锁。尽量不用

winform中 异步方法得使用

同步方式

杨中科 .NETCORE 异步编程,ASP.NET,.netcore

运行结果:
杨中科 .NETCORE 异步编程,ASP.NET,.netcore

异步方式

杨中科 .NETCORE 异步编程,ASP.NET,.netcore
运行结果:
会报错,winform 委托函数已经规定了 返回值必须是void

修改会void
杨中科 .NETCORE 异步编程,ASP.NET,.netcore
运行结果
杨中科 .NETCORE 异步编程,ASP.NET,.netcore

对于不支持异步得情况

假如说 只能调用异步的方法,Main 又不支持异步

result 方式

杨中科 .NETCORE 异步编程,ASP.NET,.netcore

运行结果:
杨中科 .NETCORE 异步编程,ASP.NET,.netcore

await会暂时退出当前函数,result是阻塞当前线程

wait 方式

杨中科 .NETCORE 异步编程,ASP.NET,.netcore
运行结果:
杨中科 .NETCORE 异步编程,ASP.NET,.netcore

异步委托

ThreadPool.QueueUserWorkItem(async(obj) => {
await SomeAsync();
});

测试

杨中科 .NETCORE 异步编程,ASP.NET,.netcore

运行:

杨中科 .NETCORE 异步编程,ASP.NET,.netcore

异步方式

杨中科 .NETCORE 异步编程,ASP.NET,.netcore

修改:异步的
杨中科 .NETCORE 异步编程,ASP.NET,.netcore

运行结果:
杨中科 .NETCORE 异步编程,ASP.NET,.netcore文章来源地址https://www.toymoban.com/news/detail-791751.html

到了这里,关于杨中科 .NETCORE 异步编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 杨中科 .NETCORE EFCORE第七部分 一对一,多对多

    1、builder.HasOne(o =o.Delivery).WithOne(d=d.Order).HasForeignKey(d=dOrderId); 2、测试插入和获取数据 示例 新建 Order 新建 Delivery DeliveryConfig OrderConfig 执行 迁移命令 查看数据库 测试数据插入 运行查看数据 1、多对多:老师一学生 2、EF Core 5.0开始,才正式支持多对多 3、需要中间表,举例数据

    2024年01月17日
    浏览(43)
  • 杨中科 .NETCORE ENTITY FRAMEWORK CORE-1 EFCORE 第一部分

    1、说明: 本课程需要你有数据库、SOL等基础知识。 2、ORM: ObjectRelational Mapping。让开发者用对象操作的形式操作关系数据库 比如插入: 比如查询: 3、有哪些ORM: EF core(官方推荐)、Dapper、SqlSugar、FreeSql等 1、Entity Framework Core(EF Coxe)是微软官方的ORM框架优点: 功能强大、官方支持、生

    2024年02月02日
    浏览(62)
  • .NetCore之log4net的使用

    1.首先下载log4ne的包: 2.添加配置文件log4net.config 3.添加日志帮助类 4.在服务中采用单例生命周期注入 5.添加全局异常过滤器 6.注入过滤器服务 7.使用 日志截图:

    2024年02月11日
    浏览(39)
  • .Net 6/NetCore3.1 Vue Element Uniapp前后端分离低代码快速开发框架

    这是一个能提高开发效率的开发框架,全自动生成PC与移动端(uniapp)代码;支持移动ios/android/h5/微信小程序。 1、前后端分离项目 2、纯后端项目 3、移动端开发uni-app(IOS、Android、H5、微信小程序) 4、内容管理系统 1、代码生成器 2、一对一与一对多代码生成 3、全自动导入导出

    2024年02月10日
    浏览(37)
  • 杨中科 ASP.NET DI综合案例

    1、目的:演示DI的能力; 2、有配置服务、日志服务,然后再开发一个邮件发送器服务。可以通过配置服务来从文件、环境变量、数据库等地方读取配置,可以通过日志服务来将程序运行过程中的日志信息写入文件、控制台、数据库等。 3、说明:案例中开发了自己的日志、配置等

    2024年02月21日
    浏览(30)
  • ASP .net core微服务实战(杨中科)

    背景: 主要是思考下,我们为什么要用微服务? 微服务我现在理解是:提供了我们一种模块化的手段,一个服务负责一种类型的业务,是一种面对复杂问题进行拆分的方式,但是也会引入一些中间件,让本来可能简单的东西,变的复杂一些,因为:有了拆分就必须有治理。

    2024年01月20日
    浏览(42)
  • 杨中科 ASP.NET Core前后端分离开发

    前后端分离 1、传统MVC开发模式: 前后端的代码被放到同一个项目中,前端人员负责编写页面的模板,而后端开发人员负责编写控制器和模型的代码并且“套模板”。 缺点: 互相依赖, 耦合性强,责任划分不清 。 2、主流的“前后端分离”: 前端开发人员和后端开发人员分别负

    2024年01月23日
    浏览(50)
  • netcore控制反转

    IoC Ioc优点 接口IMyservice 实现接口类 配置依赖注入在Startup.cs中 在控制器中注入依赖项

    2024年02月17日
    浏览(37)
  • IIS 部署.NetCore

    https://dotnet.microsoft.com/download/dotnet/3.1/runtime Windows 安装,选择desktop apps 选择好版本后,点击去,找到Core运行时的支持:IIS runtime support,里面的Hosting Bundle(托管捆绑包)下载 设置无托管 参考地址 1、cmd输入命令,提示无法启动此程序,因为计算机中丢失 api-ms-win-crt-runtime-l

    2024年02月12日
    浏览(36)
  • 【NetCore】03-依赖注入

    管理类之间的依赖,帮助我们在构建应用时遵循设计原则,确保代码的可维护性和可扩展性 依赖注入框架提供了对象创建和生命周期管理的核心能力,各个组件相互协作,也是由依赖注入框架的能力来实现的 组件包 Microsoft.Extensions.DependencyInjection.Abstractions Microsoft.Extensions.

    2024年02月15日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包