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

测试

在这里插入图片描述

运行:

在这里插入图片描述

异步方式

在这里插入图片描述

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【洛谷千题详解】P1980 [NOIP2013 普及组] 计数问题

#include<bits/stdc.h> using namespace std; int main() {int n,x,ans0;cin>>n>>x;for(int i1;i<n;i){int numberi;while(number){int anumber%10;number/10;if(ax) ans;}}cout<<ans<<endl;return 0; }

c/c++中static的用法

概述 static&#xff1a; 作为c/c的关键字之一&#xff0c;具有多种含义和应用&#xff0c;static 关键字可用于声明变量、函数、类数据成员和类函数。默认情况下&#xff0c;在所有块的外部定义的对象或变量具有静态持续时间和外部链接。 静态持续时间意味着&#xff0c;在程…

优雅的删除链表元

王有志&#xff0c;一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群&#xff1a;共同富裕的Java人 在数据结构&#xff1a;链表中&#xff0c;我们实现了链表的删除方法&#xff0c;但代码看起来并不“优雅”&#xff0c;那么今天我们就来尝试使用多种方法&#xff0c…

【深度学习:Micro-Models】用于标记图像和视频的微模型简介

【深度学习&#xff1a;Micro-Models】用于标记图像和视频的微模型简介 微模型&#xff1a;起源故事微模型到底是什么&#xff1f;更详细地解释微观模型&#xff1a;一维标签蝙蝠侠效率 在计算机视觉项目中使用微模型的额外好处面向数据的编程 在本文中&#xff0c;我们将介绍 …

SystemC学习笔记 - Hello systemc world

Hello Systemc World 码农老规矩&#xff0c;先写一个hello world并输出&#xff0c;语法什么的后面再说&#xff0c;先能编译运行再说。 目录配置 使用examples里的配置&#xff0c;在examples/sysc目录下创建test目录&#xff0c;其下创建第一个test1的目录&#xff0c;如…

【Py/Java/C++三种语言详解】LeetCode每日一题240114【链表】LeetCode83、删除排序链表中的重复节点

文章目录 题目链接题目描述解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目链接 LeetCode83、删除排序链表中的重复节点 题目描述 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返…

寡年是否适合结婚?寡妇年结婚有什么禁忌吗?让程序来告诉你有多少人是寡妇年结婚的。

什么是寡年&#xff1f; 百度百科 原文&#xff1a;寡年-百度百科 指整年没有“立春”的日子就是“盲年”&#xff0c;俗称寡年。又名滑头年 社会上流传的“寡妇年”&#xff0c;是指整个农历年都没有立春的年份。以农历2005年的鸡年为例&#xff0c;立春在公历2月4日&…

8年老鸟,自动化测试经验,测试数据管理分析总结,一篇打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 问题&#xff1a;…

Linux 转换文字编码与换行符 nkf命令

参考资料 【 nkf 】コマンド――文字コードと改行コードを変換するnkfコマンドでファイルの文字コードと改行コードを統一する 目录 一. 前期准备二. 乱码现象与分析三. nkf命令3.1 nkf --guess 查看文件编码3.2 nkf -w8 UTF-8(BOM)编码显示3.3 nkf -wd --overwrite 覆盖源文件…

关于CodeReview的一些实践和思考

在日常开发中&#xff0c;Code Review 的重要性日益凸显。它不仅有助于提升代码质量&#xff0c;还促进了团队成员之间的知识共享和技能提升。本文将主要聚焦于 Code Review&#xff0c;分享在这个过程中的一些心得和思考。 CodeReview常用到的一些术语 之前看到公司的大佬经…

项目进度管理

7过程 计划过程组6项&#xff1a;规划进度管理&#xff0c;定义活动&#xff0c;排列活动顺序&#xff0c;估算活动资源&#xff0c;估算活动持续时间&#xff0c;制定进度计划&#xff0c; 监控过程组1项&#xff1a;控制进度 1、规划进度管理&#xff0c; 对项目过程中管理…

Webpack模块打包工具

目录 Webpack模块打包工具知识点自测01.Webpack 简介以及体验目标讲解小结 02.Webpack 修改入口和出口目标讲解小结 03.案例-用户登录-长度判断目标讲解小结 04.Webpack 自动生成 html 文件目标讲解小结 05.Webpack-打包 css 代码目标讲解小结 06.优化-提取 css 代码目标讲解小…

C++学习笔记——继承和动态内存分配

目录 一、继承 二、动态内存分配 三、继承的细节 四、动态内存分配细节 五、一个动物园管理系统 继承和动态内存分配是C中两个重要的概念 一、继承 继承是C中面向对象编程的一个重要特性&#xff0c;它允许我们创建一个新类&#xff0c;该类从现有的类中继承属性和方法&…

设置ubuntu命令行样式

目录 一、脚本 二、含义 三、颜色设置 四、展示 五、注意 上次为了学习ros安装了一个22.04并且做了简单的配置&#xff0c;这次我们进一步对命令行样式进行配置 ubuntu22.04安装与配置_ubuntu22.04硬件配置-CSDN博客 一、脚本 这是他的默认配置&#xff0c;太长了&#x…

Python--循环语句

在 Python 中&#xff0c;循环语句用于重复执行一段代码多次。Python 主要提供了两种类型的循环&#xff1a;for 循环和 while 循环。 1. for 循环 for 循环用于遍历可迭代对象&#xff08;如列表、元组、字典、字符串等&#xff09;中的每个元素&#xff0c;并对每个元素执行…

【每日一题】构造限制重复的字符串

文章目录 Tag题目来源解题思路方法一&#xff1a;贪心空间复杂度&#xff1a; O ( ∑ ) O(\sum) O(∑)。 写在最后 Tag 【贪心】【字符串】【2024-01-13】 题目来源 2182. 构造限制重复的字符串 解题思路 方法一&#xff1a;贪心 思路 解题思想比较简单&#xff0c;利用贪…

C++进阶--红黑树

红黑树 一、红黑树的概念二、红黑树的性质三、红黑树结点的定义四、红黑树的插入五、红黑树的验证七、红黑树的查找七、红黑树与AVL树的比较七、完整代码RBTree.h 一、红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色…

IaC基础设施即代码:使用Terraform 连接 alicloud阿里云

目录 一、实验 1.环境 2.alicloud阿里云创建用户 3.Linux使用Terraform 连接 alicloud 4.Windows使用Terraform 连接 alicloud 二、问题 1.Windows如何申明RAM 相关变量 2.Linux如何申明RAM 相关变量 3. Linux terraform 初始化失败 4.Linux terraform 计划与预览失败…

关于高通Android 平台上qssi的介绍

1. QSSI 是 Qualcomm Single System Image 的缩写。 2. Android Q上开始支持QSSI。 3. QSSI 是用来编译system.img的 3.1 QSSI编译注意事项 lunch qssi ------ 编译system.img lunch target ------ 编译其余的image 3.2 有QSSI和没有QSSI的编译流程对比 没有QS…

YOLOv5独家原创改进:多层次特征融合(SDI)结合PConv、DualConv、GSConv,实现二次创新 | UNet v2最新论文

💡💡💡本文独家改进:多层次特征融合(SDI)高效结合DualConv、PConv、GSConv等实现二次创新 1)替代原始的Concat; 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html 💡💡💡全网独家首发创新(原创),适合paper !!! 💡�…