杨中科 .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();
});

测试

在这里插入图片描述

运行:

在这里插入图片描述

异步方式

在这里插入图片描述

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx配置反向代理实例二

Mac 安装Nginx教程 Nginx配置反向代理实例一 提醒一下:下面实例讲解是在Mac系统演示的; 反向代理实例二实现的效果 使用nginx 反向代理,根据访问的地址跳转到不同端口的服务中 nginx 监听端口为81; 访问地址1:http:/…

postman使用-06断言

文章目录 一、断言定义二、 常用的断言三、断言-状态码(1)单一状态码断言:Status code:Code is 200 检查返回的状态码是否为200原始模板:修改后:括号里的200也可以改成自己要断言的状态码具体步骤:断言成功…

LVGL学习笔记 显示和隐藏 对象的属性标志位 配置

在显示GUI的过程中需要对某些对象进行临时隐藏或临时显示,因此需要对该对象的FLAG进行配置就可以实现对象的显示和隐藏了. 调用如下接口可以实现: lv_obj_add_flag(user_obj, LV_OBJ_FLAG_HIDDEN);//隐藏对象lv_obj_clear_flag(user_obj, LV_OBJ_FLAG_HIDDEN);//取消隐藏实现的…

【读书笔记】《重构_改善既有代码的设计》24种代码的坏味道

24中代码的坏味道 标题:【读书笔记】《重构_改善既有代码的设计》24种代码的坏味道 时间:2024.01.11 作者:耿鬼不会笑 24种代码的坏味道 1.神秘命名(Mysterious Name) 描述:改名不仅仅是修改名字而已。如…

字体图标 iconFont

字体图标使用场景︰主要用于显示网页中通用、常用的一些小图标 精灵图是有诸多优点的,但是缺点很明显。 图片文件还是比较大的。图片本身放大和缩小会失真。一旦图片制作完毕想要更换非常复杂。 此时,有一种技术的出现很好的解决了以上问题&#xff0c…

springboot虹软人脸识别集成

准备工作 虹软开放平台中创建一个新的应用 虹软开发平台【点我跳转】 开始上代码 基本配置 将下载的jar包放到src同级目录下 <!-- 虹软--><dependency><groupId>com.arcsoft.face</groupId><artifactId>arcsoft-sdk-face</artifactI…

力扣日记1.10-【二叉树篇】701. 二叉搜索树中的插入操作

力扣日记&#xff1a;【二叉树篇】701. 二叉搜索树中的插入操作 日期&#xff1a;2024. 参考&#xff1a;代码随想录、力扣 —————————————————————— 天哪&#xff0c;上次打开力扣还是2023&#xff0c;转眼已经2024&#xff1f;&#xff01; 两个星期过去…

【提示学习论文六】MaPLe: Multi-modal Prompt Learning论文原理

文章目录 MaPLe: Multi-modal Prompt Learning 多模式提示学习文章介绍动机MaPLe:Multi-modal Prompt Learning 模型结构1、Deep Language Prompting 深度语言提示2、Deep Vision Prompting 深度视觉提示3、Vision Language Prompt Coupling 视觉语言提示耦合提示耦合过程 实验…

232Modbus转Profinet应用案例分享

现场需求&#xff1a;现场需要将多台伺服接到控制器&#xff08;1200PLC&#xff09;上&#xff0c;用Modbus协议。 根据现场的描述&#xff0c;我们给出一个方案&#xff0c;在PLC和伺服中间加入232Modbus转Profinet&#xff08;XD-PNR200&#xff09;网关&#xff0c;232Modb…

如何进行大数据系统测试

大数据系统常见的架构形式有如下几种&#xff1a; Hadoop架构&#xff1a; Hadoop Distributed File System (HDFS)&#xff1a;这是一种分布式文件系统&#xff0c;设计用于存储海量数据并允许跨多台机器进行高效访问。 MapReduce&#xff1a;作为Hadoop的核心计算框架&#…

基于css实现动画效果

介绍 本文将会基于css&#xff0c;实现各种动画效果&#xff0c;接下来会从简单几个例子入手。 案例 三颗球 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><title>React App</title><style>…

设计模式的7大基本原则

概括&#xff1a; 1、单一职责原则(Single Responsibility Principle&#xff0c;SRP) 2、开放封闭原则(Open/Closed Principle&#xff0c;OCP) 3、里氏替换原则(Liskov Substitution Principle&#xff0c;LSP) 4、依赖倒置原则(Dependency Inversion Principle&#xff0c;D…

js解构赋值和...的运用

解构赋值 含义 在 JavaScript 中&#xff0c;解构赋值是一种方便的语法&#xff0c;用于从数组或对象中提取数据并赋值给变量 示例 解构数组&#xff1a; const numbers [1, 2, 3, 4, 5]; const [a, b, ...rest] numbers; console.log(a); // 1 console.log(b); // 2 cons…

【scala】编译build报错 “xxx is not an enclosing class“

private[sources] val creationTimeMs: Long {val session SparkSession.getActiveSession.orElse(SparkSession.getDefaultSession)require(session.isDefined)private[xxx]是访问权限控制在xxxx包的意思。 解决办法&#xff1a; 把[sources]删掉&#xff0c;或者改成和包名…

vim升级和配置

vim升级和配置 1、背景2、环境说明3、操作3.1 升级VIM3.2 配置VIM3.2.1、编辑vimrc文件3.2.2、安装插件 1、背景 日常工作跟linux系统打交道比较多&#xff0c;目前主要用到的是Cenots7和Ubuntu18这两个版本的linux系统&#xff0c;其中Centos7主要是服务器端&#xff0c;Ubun…

VMware正被博通“收拾”,我们是不是可以“嚣张”一点?

引言&#xff1a;一朝躺在大佬怀&#xff0c;今生荣华伸手来。 【全球存储观察 &#xff5c; 科技热点关注】 如是所闻&#xff0c;2023年元旦前两个月&#xff0c;大家看到博通以610亿美元的高价&#xff0c;成功完成收购了闻名遐迩的虚拟化大佬VMware。日期为2023年11月22日。…

0111qt

实现闹钟&#xff0c;并播报懒虫...~ daytest.pro: QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (th…

CImage成员函数Load、Create、Draw、Save使用方法简介

在Visual C中若想处理图片&#xff0c;可以使用CBitmap 类或静态图片控件。但它们处理只能处理BMP格式的图片、图标、光标以及图元文件等&#xff1b;使用起来非常受限&#xff0c;因此我们一般只是在做程序界面时使用。而CImage可以处理JPGE、GIF、BMP、PNG等多种格式图片&…

1.11.。。。

1 有道云笔记 2 .h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include <QTextToSpeech>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QW…

江科大STM32

参考&#xff1a; https://blog.csdn.net/weixin_54742551/article/details/132409170?spm1001.2014.3001.5502 https://blog.csdn.net/Johnor/article/details/128539267?spm1001.2014.3001.5502 SPI&#xff1a;https://blog.csdn.net/weixin_62127790/article/details/132…