杨中科 .NETCORE 异步编程

news2024/9/23 11:12:51

一、 为什么需要异步编程

在这里插入图片描述

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

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

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

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.coloradmin.cn/o/1380955.html

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

相关文章

Android中集成FFmpeg及NDK基础知识

前言 在日常App开发中,难免有些功能是需要借助NDK来完成的,比如现在常见的音视频处理等,今天就以ffmpeg入手,来学习下Android NDK开发的套路. JNI和NDK 很多人并不清除JNI和NDK的概念,经常搞混这两样东西,先来看看它们各自的定义吧. JNI和NDK 很多人并不清除JNI和NDK的概念…

智能路由器 端口映射 (UPnP) Padavan内网端口映射配置方法

新版本Padavan 4.4内核的端口映射配置和老版本的不太一样,因为新版本默认是启用的 UPnP端口映射, 同时默认使用的是 IGD UPnP自动端口映射, UPnP名词解释: UPnP通用即插即用,是一组协议的统称,是一种基于TCP/IP、UDP和HTTP的分布式、开放体系&#xff…

CSS3动画效果详解

CSS3动画 在CSS3中,animation属性用于实现元素的动画。 animation属性跟transition属性在功能实现上是非常相似的,都是通过改变元素的属性值来实现动画效果。但是,这两者实际上有着本质的区别 对于transition属性来说,它只能将…

Spring创建的单例对象,存在线程安全问题吗?

这个问题涉及到Spring框架中的Bean的作用域、单例模式的线程安全性以及如何判断和处理线程安全问题。让我们一步步深入探讨这些概念。 Spring Bean的作用域 Spring提供了几种不同的Bean作用域,包括: 1、 Singleton(单例)&#x…

linux软件安装(yum命令)

1.Linux系统的应用商店 操作系统安装软件有许多种方式,一般分为: 下载安装包自行安装 如win系统使用exe文件、msi文件等如mac系统使用dmg文件、pkg文件等 系统的应用商店内安装 如win系统有Microsoft Store商店如mac系统有AppStore商店 Linux命令行…

阳光保险选择OceanBase稳定运行超700天

阳光保险集团成立于 2005 年 7 月,旗下拥有财产保险、人寿保险、信用保证保险、资产管理等多家专业子公司,是全球市场化企业中成长最快的集团公司之一,目前位列中国保险行业前八。随着数字化升级趋势的不断加速,很多企业产生将软硬…

并发编程之ReentrantReadWriteLock详解

目录 ReentrantReadWriteLock介绍 线程进入读锁的前提条件 线程进入写锁的前提条件 ReentrantReadWriteLock三个重要的特性 ReentrantReadWriteLock类 ReentrantReadWriteLock使用读写锁 锁降级 注意事项 ReentrantReadWriteLock结构 ReentrantReadWriteLock读写状态设…

Github上传代码/删除仓库/新建分支的操作流程记录

首先先安装git,安装完git后,看如下操作指令: 输入自己的用户名和邮箱(为注册GITHUB账号时的用户名和邮箱): git config --global user.name "HJX-exoskeleton" git config --global user.email …

Kafka基本介绍

消息队列 产生背景 消息队列:指的数据在一个容器中,从容器中一端传递到另一端的过程 消息(message): 指的是数据,只不过这个数据存在一定流动状态 队列(queue): 指的容器,可以存储数据,只不过这个容器具备FIFO(先进…

Mysql事务的处理

1、事务,就是一组命令的操作。 不过这一组命令,我们有时候需要使用手动提交; 1、使用这组命令可以查询出来现在的提交方式:自动提交(就是命令输入,点击enter后,会不会直接对表格产生修改&#x…

x-cmd pkg | csview - 美观且高性能的 csv 数据查看工具

目录 介绍首次用户功能特点类似工具与竞品进一步阅读 介绍 csview 是一个用于在命令行中查看 CSV 文件的工具,采用 Rust 语言编写的,支持中日韩/表情符号。它允许用户在终端中以表格形式查看 CSV 数据,可以对数据进行排序、过滤、搜索等操作…

关于html导出word总结一

总结 测试结果不理想,html-to-docx 和 html-docx-js 最终导出的结果 都 差强人意,效果可以见末尾的附图 环境 "electron": "24.3.0" 依赖库 html-docx-js html-docx-js - npm html-to-docx html-to-docx - npm file-saver…

Linux技术,winSCP连接服务器超时故障解决方案

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 故障现象 使用 sftp 协议连接主机时, 明显感觉缓慢且卡顿,并且时常出现如下报错: 点击重新连接后,又有概率重新连接上; 总之在"连接上"和&…

前端js调用Lodop实现云打印

一、下载Lodop控件 官网:下载中心 - Lodop和C-Lodop官网主站 二、解压后安装 双击进行安装,里面有些页面文件是一些教程案例 勾选云服务工作模式 安装成功会自动启动 浏览器访问地址:http://localhost:8000/ 首页最下面有个教程案例跳转地址&…

kali_linux换源教程

vim /etc/apt/sources.list #阿里云deb http://mirrors.aliyun.com/kali kali-rolling main non-free contribdeb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib#清华大学源deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib…

navicat for oracle

前言 Oracle中的概念并不是创建数据库,而是创建一个表空间,然后再创建一个用户,设置该用户的默认表空间为我们新创建的表空间,这些操作之后,便和你之前用过的mysql数据库创建完数据库一模一样了。 创建数据库 使用O…

PHP信息分类网源码带手机端和文档

PHP信息分类网源码带手机端和文档 安装简易说明: 上传 → 安装 → 进入后台 → 恢复数据 → 修改cookie记录值(第3点有说明) 1.上传程序到网站根目录,访问http://域名/install/index.php 进行安装,不要直接打开网址,先直接安装&am…

Java学习手册——第六篇输入输出

几乎所有的开发语言都会有输入输出,程序的定义里面也有输入输出,可以见得输入输出是何等的重要。如果没有输入,人类如何与计算机交流?如果没有输出,一切努力都是白费,因为我们看不到结果。 这里的输入输出你…

常用计算电磁学算法特性与电磁软件分析

常用计算电磁学算法特性与电磁软件分析 参考网站: 计算电磁学三大数值算法FDTD、FEM、MOM ADS、HFSS、CST 优缺点和应用范围详细教程 ## 基于时域有限差分法的FDTD的计算电磁学算法(含Matlab代码)-框架介绍 参考书籍:The finite…

Multi-Concept Customization of Text-to-Image Diffusion——【代码复现】

本文是发表于CVPR 2023上的一篇论文:[2212.04488] Multi-Concept Customization of Text-to-Image Diffusion (arxiv.org) 一、引言 本文主要做的工作是对stable-diffusion的预训练模型进行微调,需要的显存相对较多,论文中测试时是在两块GP…