当前位置: 首页 > news >正文

杨中科 .NETCORE 异步编程

一、 为什么需要异步编程

在这里插入图片描述

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

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

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

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

在这里插入图片描述
处理完成后再回调,异步回调通知的。就可以同时处理更多的请求

传统多线程开发太麻烦。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);
}

试一试异步

新建控制台应用

在这里插入图片描述
在这里插入图片描述

同步方式

在这里插入图片描述

运行结果:

在这里插入图片描述

异步方式

此时主方法需要改为

在这里插入图片描述
在这里插入图片描述

若去掉await

在这里插入图片描述

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

在这里插入图片描述

读取的两种方式 ,第一种会自动转换(是第二种的两句合并)
在这里插入图片描述
不加await 运行效果 是因为 写入hello 字符得速度很快
尝试加入 大字符
在这里插入图片描述

运行
在这里插入图片描述

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

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

加入await之后:
在这里插入图片描述

运行结果:
在这里插入图片描述

三、编写异步方法

不带返回值

在这里插入图片描述

运行:

运行结果

查看文件:
在这里插入图片描述

带返回值

在这里插入图片描述
在这里插入图片描述

运行结果:

在这里插入图片描述

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

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

winform中 异步方法得使用

同步方式

在这里插入图片描述

运行结果:
在这里插入图片描述

异步方式

在这里插入图片描述
运行结果:
会报错,winform 委托函数已经规定了 返回值必须是void

修改会void
在这里插入图片描述
运行结果
在这里插入图片描述

对于不支持异步得情况

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

result 方式

在这里插入图片描述

运行结果:
在这里插入图片描述

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

wait 方式

在这里插入图片描述
运行结果:
在这里插入图片描述

异步委托

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

测试

在这里插入图片描述

运行:

在这里插入图片描述

异步方式

在这里插入图片描述

修改:异步的
在这里插入图片描述

运行结果:
在这里插入图片描述

相关文章:

杨中科 .NETCORE 异步编程

一、 为什么需要异步编程 异步点餐的优点:能同时服务多个客人 异步点餐一定会提升单个客户点餐速度吗? 答案理所当然:不能 图片美化服务例子服务器能够同时服务的请求数量有限 void BeautifyPic (File photo, Response response) {byte[] …...

Rust-函数

简介 Rust的函数使用关键字fn开头。 函数可以有一系列的输入参数,还有一个返回类型。 函数体包含一系列的语句(或者表达式)。 函数返回可以使用return语句,也可以使用表达式。 Rust编写的可执行程序的入口就是fn main()函数。 以下是一个函数的示例…...

【java八股文】之分布式系列篇

【java八股文】之MYSQL基础篇-CSDN博客 【java八股文】之JVM基础篇-CSDN博客 【java八股文】之Redis基础篇-CSDN博客 【java八股文】之Spring系列篇-CSDN博客 【java八股文】之分布式系列篇-CSDN博客 【java八股文】之Java基础篇-CSDN博客 【java八股文】之多线程篇-CSDN…...

【CSCV】划分数据集

参考论文IEEE Xplore Full-Text PDF: 划分数据集时多了一个development set,如下图 先占个坑,看完论文再来填坑...

【面试合集】说说提高微信小程序的应用速度的手段有哪些?

面试官:说说提高微信小程序的应用速度的手段有哪些? 一、是什么 小程序启动会常常遇到如下图场景: 这是因为,小程序首次启动前,微信会在小程序启动前为小程序准备好通用的运行环境,如运行中的线程和一些基…...

uniapp——自定义导航栏的封装

为什么需要封装自定义导航 首先如果开发的是微信小程序,那么在安卓环境下导航栏标题是默认靠左对齐的(虽然你在微信开发者工具上看到的依旧是居中展示),而在ios环境则是居中展示的。很多时候我们需要对整个项目有一个主题色或者公…...

Halcon机器视觉和运动控制软件通用框架,24年1月最新版新增UI设计器,插件式开发,开箱即用 仅供学习!

24年1月更新 下载点我 此版本已经添加ui设计器。具体功能如上所示,可以自定义变量,写c#脚本,自定义流程,包含了halcon脚本和封装的算子,可自定义ui,通过插件形式开发很方便拓展自己的功能。 ui设计器...

WebGL简介以及使用

WebGL简介 WebGL&#xff08;Web图形库&#xff09; 是一种在没有使用插件的情况下在网页浏览器中渲染2D图形和3D图形的技术。它基于OpenGL ES&#xff0c;一个在嵌入式系统中广泛使用的图形API。WebGL通过HTML5的 <canvas> 元素直接在网页上实现图形渲染&#xff0c;使…...

导轨式信号隔离变送器比例阀门线性驱动器4-20mA/0-5V/0-10V转0-165mA/0-80mA/0-1A/0-2A/0-4A

主要特性 精度、线性度误差等级&#xff1a; 0.1、0.2、0.5 级4-20mA/0-5V/0-10V 等标准信号输入0~100mA/0~500mA/0~1A/0-5A 等电流信号输出0~1V(max 2A)/0~10V/0-24V(max 5A) 等电压信号输出信号输入/信号输出 3000VDC 隔离辅助电源&#xff1a;12V、15V 或 24V 直流单电源供…...

Windows:win11不同分辨率2块屏幕在扩展模式下小屏上边有黑边

摘要&#xff1a;电脑只有一个核显时&#xff0c;Windows11系统在扩展模式下接入2块不同大小的分辨率的显示器&#xff0c;设置高分辨率显示器为主显示器。这时低分辨显示器系统可以正确设置分辨率&#xff0c;但是在低分率显示器上边出现较宽黑边&#xff0c;通过手工在显示设…...

Jenkins-执行脚本案例-初步认识JenKins的使用

环境搭建 docker pull jenkins/jenkins:2.440 docker run -d -p 10240:8080 -p 10241:50000 -v /env/liyong/data/docker/jenkins_mount:/var/jenkins_home -v /etc/localtime:/etc/localtime --name jenkins jenkins/jenkins:2.440 #在挂载的目录下去修改仓库地址 vim hudson…...

Open CV 图像处理基础:(五)Java 使用 Open CV 的绘图函数

Java 使用 Open CV 的绘图函数 使用 Open CV 在 Java 中对图片使用绘图函数&#xff0c;分别绘制矩形、斜线、圆形、椭圆形以及添加文本 Java 使用 Open CV 的绘图函数 Java 使用 Open CV 的绘图函数函数绘制矩形绘制线绘制圆形绘制椭圆添加文本 代码示例Open CV 专栏导航 函…...

PostgreSQL之SEMI-JOIN半连接

什么是Semi-Join半连接 Semi-Join半连接&#xff0c;当外表在内表中找到匹配的记录之后&#xff0c;Semi-Join会返回外表中的记录。但即使在内表中找到多条匹配的记录&#xff0c;外表也只会返回已经存在于外表中的记录。而对于子查询&#xff0c;外表的每个符合条件的元组都要…...

开发规范及常用工具

一、定义对象规范 entity : 是与数据库一一对应的字段 vo : 返回给前端的视图对象 dto : 前端传过来的参数封装成dto,用于返回给前端的对象&#xff0c;一般用于查询操作。 POJO是DO/DTO/BO/VO的统称&#xff0c;禁止命名成xxxPOJO。 1、entity实体类与数据库中的字段一一对应…...

238.【2023年华为OD机试真题(C卷)】火星文计算(模拟-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-火星文计算二.解题思路三.题解代码Python题解代…...

如何通过openresty 限制国外Ip访问

参考代码 https://gitee.com/xiaoyun461/blocking-external-networks首先 需要的依赖&#xff1a; libmaxminddb https://github.com/maxmind/libmaxminddbmaxmind-geoip https://github.com/Dreamacro/maxmind-geoiplibmaxminddb 需要gcc编译&#xff0c;可用 Dockerfile …...

【Vue2】一个数组按时间分割为【今年】和【往年】俩个数组

一. 需求 后端返回一个数组&#xff0c;前端按时间维度将该数组的分割为【今年】和【往年】俩个数组后端返回的数组格式如下 timeList:[{id:1,billTime:"2024-01-10",createTime:"2024-01-10 00:00:00",status:0},{id:2,billTime:"2022-05-25"…...

解决鸿蒙APP的内存泄漏

解决鸿蒙&#xff08;HarmonyOS&#xff09;应用的内存泄漏问题需要采用一系列的策略和技术。与解决Android内存泄漏类似&#xff0c;以下是一些建议&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1…...

云原生专栏大纲

1. 私有云实战之基础环境搭建 2. 云原生实战之kubesphere搭建 3.云原生之kubesphere运维 4. 云原生之kubesphere基础服务搭建 5.云原生安全之kubesphere应用网关配置域名TLS证书 6.云原生之DevOps和CICD 7.云原生之jenkins集成SonarQube 8.云原生存储之Ceph集群 9.云原生存储之…...

robot_framework的robot语法与python脚本之间的语法转换

Robot Framework是一个开源的自动化测试框架&#xff0c;支持关键字驱动和数据驱动的测试方法。它具有简单易学的语法和丰富的库&#xff0c;可以与多种语言进行集成&#xff0c;包括Python。 1. robot 的关键字 Robot Framework 是一个用于自动化测试和自动化任务的开源框架…...

改进人工势场多无人机三维航迹规划【附代码】

✨ 长期致力于航迹规划、多无人机、目标分配、人工势场算法、三维空间研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;多目标任务分配与人工势场基础&…...

多Agent协作是趋势,但谁来管这些Agent

如果你最近参加过AI相关的技术沙龙或者行业峰会&#xff0c;大概率会听到一个词&#xff1a;多Agent协作。简单说就是&#xff0c;不是一个AI帮你干完所有事&#xff0c;而是多个AI各司其职、互相配合。比如一个Agent负责理解需求&#xff0c;一个Agent负责写代码&#xff0c;一…...

客观现实源于波函数坍缩:意识内源测量与智能外源投影一体化统一理论(世毫九实验室原创理论)

客观现实源于波函数坍缩:意识内源测量与智能外源投影一体化统一理论(世毫九实验室原创理论) 方见华 世毫九实验室 摘要:本文首次建立了贯通量子力学、认知科学与人工智能的意识-智能-现实一体化统一理论,从第一性原理出发证明:客观现实不是独立于意识的先验存在,而是意…...

AntiDupl.NET:高效智能的重复图片检测与清理解决方案

AntiDupl.NET&#xff1a;高效智能的重复图片检测与清理解决方案 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾因电脑中堆积如山的重复图片而感到困扰&#…...

小波散射网络:从理论优势到小样本图像分类实践

1. 小波散射网络为什么值得关注 第一次听说小波散射网络时&#xff0c;我和大多数搞机器学习的朋友反应一样&#xff1a;"这玩意儿和普通卷积神经网络&#xff08;CNN&#xff09;有什么区别&#xff1f;"直到去年接手一个医疗影像项目&#xff0c;手头只有200张标注…...

【大白话说Java面试题 第49题】【JVM篇】第9题:什么是双亲委派机制?介绍一下运作过程。?

&#x1f4cc; PDF&#xff1a;大白话说Java面试题 — 02-JVM篇 第9题&#xff1a;什么是双亲委派机制&#xff1f;介绍一下运作过程。 &#x1f4da; 回答&#xff1a; 核心概念&#xff1a; 双亲委派机制 是 JVM 中类加载器的工作模式&#xff0c;用于保证类加载的安全性和…...

用Fiddler和Proxifier抓包分析易游网络验证API,手把手教你模拟合法请求

网络验证API抓包与模拟请求实战指南 在当今数字化产品生态中&#xff0c;网络验证机制已成为软件授权管理的核心组件。不同于传统的本地验证方式&#xff0c;网络验证通过远程API交互实现更高安全性的许可控制&#xff0c;这也使得协议层分析成为理解其工作原理的关键切入点。对…...

告别报错!保姆级教程:在PyCharm 2023.3上完美安装ManimCE(附国内镜像加速)

在PyCharm 2023.3中零失败安装ManimCE的终极指南 当数学可视化遇上Python&#xff0c;ManimCE无疑是当前最强大的工具之一。但对于许多开发者来说&#xff0c;从环境配置到成功运行第一个动画&#xff0c;这段旅程往往充满坎坷。本文将彻底解决安装过程中的所有痛点&#xff0c…...

基于MCP协议的学术成果商业化AI管道:从论文到商业机会的自动化桥梁

1. 项目概述&#xff1a;从象牙塔到市场的自动化桥梁看到apifyforge/academic-commercialization-pipeline-mcp这个项目标题&#xff0c;我的第一反应是&#xff1a;终于有人把学术界和产业界之间那道无形的墙&#xff0c;用代码给砌出了一条自动化通道。这个项目本质上是一个“…...

为什么你的Windows任务栏需要一次彻底的美学革命?

为什么你的Windows任务栏需要一次彻底的美学革命&#xff1f; 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否曾经盯着Windows桌面…...