杨中科 ASP.NETCORE 异步编程二

一、不要用sleep()

如果想在异步方法中暂停一段时间,不要用Thread.sleep(),因为它会阻塞调用线程,而要用await.Task.Delay()。

举例:
下载一个网址,3秒后下载另一个

示例:

sleep()

为了能直观看到效果,使用winform项目

在这里插入图片描述
在这里插入图片描述
此时点击按钮之后,页面便卡死不动了,不能在进行操作。因为Sleep()方法,阻塞了主线程。
睡眠结束后,才能继续操纵界面

注释后,便能在下载过程中,继续操作页面
在这里插入图片描述

await task.delay()

不会阻塞主线程

在这里插入图片描述
此时界面也是可正常操作

在控制台中没看到区别,但是放到WinForm程序中就能看到区别了ASP.NET Core中也看不到区别但是sleep()会降低并发

二、CancellationToken

概念:

多线程一般用于处理比较耗时的操作,
有时需要提前终止任务,比如:
请求超时、用户取消请求。很多异步方法都有
CancellationToken参数,用于获得提前终止执行的信号。
(下载文件暂停,用户关闭网页请求终止)

方法:

CancellationToken结构体
None:空
)bool lsCancellationRequested是否取消(用于判断请求者,是否终止请求)
Register(Action callback)注册取消监听
(
)Throw lfcancellationRequested()如果任务被取消,执行到这句话就抛异常

CancellationTokenSource
CancelAfter()超时后发出取消信号
Cancel()发出取消信号
CancellationToken Token

示例:

为“下载一个网址N次”的方法增加取消功能。
分别用GetstringAsync+IsCancellationRequested、GetStringAsync+ThrowlfCancellatiorRequested()、带CancellationToken的GetAsync()分别实现:取消分别用超时、用户敲按键(不能await)实现。

1.普通方式

在这里插入图片描述

运行结果:
在这里插入图片描述
下载一百遍终止。

2.加入cancellationtoken

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

调用结果:
请求被取消

在这里插入图片描述

3.cancellationToken.ThrowIfCancellationRequested()

在这里插入图片描述

运行结果,会抛出异常
在这里插入图片描述

4.调用封装好的getAsync()方法

在这里插入图片描述
在这里插入图片描述
运行结果
抛出异常

在这里插入图片描述

cancel() 手动取消

在这里插入图片描述

ASP.NET Core开发中,一般不需要自已处理CancellationToken.
CancellationTokenSource这些,只要做到“能转发CancellationToken就转发即可。ASP.NET Core会对于用户请求中断进行处理。
(*)演示一下ASP.NETCore中的使用:写一个方法,Delay1000次,用Debug.WriteLine()输出,访问中间跳到放到其他网站。

在这里插入图片描述
访问其他网站的时候,就会抛出异常,暂停下载
在这里插入图片描述

三、WhenAll()

Task类的重要方法:

  1. Task WhenAny(lEnumerabletasks)等,任何一个Task完成,Task就完成
  2. Task<TResult[]> WhenAll(paramsTask[]tasks)等,所有Task完成,Task才完成。用于等待多个任务执行结束,但是不在乎它们的执行顺序。
  3. FromResult()创建普通数值的Task对象。

示例

Task tl =File.ReadAllTextAsync(“d:/l.txt”);
Task t2 =File.ReadAllTextAsync(“d:/2.txt”);
Task t3 =File.ReadAllTextAsync(“d:/3.txt”);
string[] results = await Task.WhenAll(t1, t2, t3)
string s1 = results[0];
string s2 = results[1];
string s3 = results[2];

1.whenall

在这里插入图片描述

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

案例:

计算一个文件夹下,所有文本文件的单词个数汇总。
在这里插入图片描述
运行结果
在这里插入图片描述

四、异步其他问题

接口中的异步方法:

async是提示编译器为异步方法中的await代码进行分段处理的,而一个异步方法是否修饰了async对于方法的调用者来讲没区别的,因此对于接口中的方法或者抽象方法不能修饰为async。

在这里插入图片描述
在实现类中添加async

在这里插入图片描述

异步与yield:

复习: yield return不仅能够简化数据的返回,而且可以让数据处理“流水线化”,提升性能。

static lEnumerable<string> Test()
{yield return "hello",yield return "'yzk" ;yield return "'youzack";
}

在这里插入图片描述
运行结果
在这里插入图片描述
在旧版C#中,async方法中不能用yield。
从C#8.0开始,把返回值声明为IAsyncEnumerable(不要带Task),然后遍历的时候用await foreach()即可。

static async Task Main(string[] args)
{await foreach(var s in Test())Console.WriteLine(s);
}static async lAsyncEnumerable<string> Test()
{yield return "hello";yield return "yzk";yield return "youzack";
}

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

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

相关文章

【STM32开发之寄存器版】(八)-定时器的编码器接口模式

一、前言 1.1 编码器接口原理 编码器模式主要用于检测旋转编码器的转动方向和转动速度。旋转编码器一般输出两路相位相差90度的脉冲信号&#xff08;称为A相和B相&#xff09;&#xff0c;通过这两路信号&#xff0c;定时器可以判断编码器的旋转方向&#xff0c;并计数转动的脉…

新同事半天搭建了一套CRM系统,实力赢得老板青睐直接转正

我们都知道&#xff0c;搭建一套CRM系统&#xff0c;根据功能和数据的复杂性&#xff0c;一般需要2至4周才能完成。最近&#xff0c;我们团队新来了一位同事&#xff0c;之前做过产品&#xff0c;没写过代码。老板安排他试试能不能搭建一套CRM系统&#xff0c;主要用于市场部同…

【学术会议征稿】第五届应用力学与机械工程国际学术会议(ICAMME 2024)

第五届应用力学与机械工程国际学术会议&#xff08;ICAMME 2024&#xff09; 2024 5th International Conference on Applied Mechanics and Mechanical Engineering 在全球技术快速发展的背景下&#xff0c;应用力学和机械工程作为推动现代工业创新的根基&#xff0c;持续展…

解决html2canvas图片模糊不清,超出一页长截图问题

前言 最近需要做一个页面截图功能&#xff0c;类似QQ、微信截图功能&#xff0c;核心是将Html网页转换成图片格式&#xff0c;并且尽可能保证截图后图片样式和原网页一致。对比了一些第三方插件以及浏览器自带的API&#xff0c;最终选择使用JavaScript库‌&#xff1a;如html2…

【读书笔记·VLSI电路设计方法解密】问题7:什么是基于标准单元的专用集成电路 (ASIC) 设计方法论

标准单元方法论是一种基于预组装库单元的芯片设计方法。该库中包含的标准单元和宏单元(例如存储器、I/O、特殊功能单元、锁相环(PLLs)等)已经在预定的工艺节点中设计、布局并经过验证。这些单元经过完全表征,并在逻辑、时序、物理和电气模型方面进行了定义,并正确地打包在…

【学术会议征稿】2024年智能通信、感知与电磁学术会议(ICSE 2024)

2024年智能通信、感知与电磁学术会议&#xff08;ICSE 2024&#xff09; 2024 International Conference on Intelligent Communication, Sensing and Electromagnetics 2024年智能通信、感知与电磁学术会议&#xff08;ICSE 2024&#xff09;将于2024年12月13-15日在中国-广…

【AI系统】AI在不同领域的应用与行业影响

本文将探讨AI在不同技术领域和行业中的广泛应用&#xff0c;以及这些应用如何影响和改变我们的世界。 I. 引言 AI技术正日益渗透到各个技术领域&#xff0c;从计算机视觉到自然语言处理&#xff0c;再到音频处理&#xff0c;AI的应用正变得越来越广泛。这些技术的发展不仅推动…

TMtech凯珏LED驱动芯片T8332AD升降压线性

T8332AD 是 TM Technology, Inc. 设计的一款多功能 LED 驱动 IC。它具有广泛的输入电压范围、精确的恒流控制和多种保护机制&#xff0c;非常适合各种大功率 LED 应用。以下是其主要特点、应用和技术规格的概述。 主要特点 1. 宽输入电压范围&#xff1a;在 5V 到 60V 之间高…

平衡树 BTree和B+Tree

B树索引是B树在数据库中的一种实现&#xff0c;是最常见也是数据库中使用最为频繁的一种索引。B树中的B代表平衡&#xff08;balance&#xff09;&#xff0c;而不是二叉&#xff08;binary&#xff09;&#xff0c;因为B树是从最早的平衡二叉树演化而来的。在讲B树之前必须先了…

41 | 单例模式(上):为什么说支持懒加载的双重检测不比饿汉式更优?

从今天开始&#xff0c;我们正式进入到设计模式的学习。我们知道&#xff0c;经典的设计模式有 23 种。其中&#xff0c;常用的并不是很多。据我的工作经验来看&#xff0c;常用的可能都不到一半。如果随便抓一个程序员&#xff0c;让他说一说最熟悉的 3 种设计模式&#xff0c…

2015年国赛高教杯数学建模C题月上柳梢头解题全过程文档及程序

2015年国赛高教杯数学建模 C题 月上柳梢头 月上柳梢头&#xff0c;人约黄昏后”是北宋学者欧阳修的名句&#xff0c;写的是与佳人相约的情景。请用天文学的观点赏析该名句&#xff0c;并进行如下的讨论&#xff1a;   1. 定义“月上柳梢头”时月亮在空中的角度和什么时间称为…

SOMEIP_ETS_177: SD_Unused_data_after_Options_Array_wrong_length

测试目的&#xff1a; 验证DUT能够正确处理单播SubscribeEventgroup请求&#xff0c;该请求在末尾包含未使用的有效载荷数据&#xff0c;且这些数据的长度不包括在SOME/IP长度字段中&#xff0c;并对此发送SubscribeEventgroupAck消息。 描述 本测试用例旨在确保DUT遵循SOME…

nginx代理,nginx301跳转,nginx地址重写

ngin代理 假如你的地址是:http://192.168.1.2:8282 你的域名是:www.jjycheng.com 你想访问域名www.jjycheng.com时,实际请求的地址是http://192.168.1.2:8282,但浏览器上的地址不变。 此时,你用到的技术就是请求代理 代理.conf配置 http {server {listen 80; server_na…

Python 代码执行失败问题及解决方案

在使用 Python 编程时&#xff0c;代码执行失败可能由多种原因引起。常见的问题包括语法错误、逻辑错误、环境配置问题、依赖项缺失等。下面列举了一些常见的 Python 代码执行失败的原因及对应的解决方案。 1、问题背景 在尝试运行一个 Python 代码时&#xff0c;代码没有执行…

centos6.9不用安装光盘在控制台重置root密码

centos6.9不用安装光盘在控制台重置root密码 centos6.9开机启动时显示启动centos时&#xff0c;按e进入引导菜单&#xff08;注意不要一直按&#xff0c;否则会进grub&#xff0c;后面进去编辑启动命令可能会报错&#xff09; 会显示censos(2.6.32-696.e16.x86_64) 选censos(…

部署 LLMs 前如何计算与优化 GPU 内存需求?

编者按&#xff1a;想要部署大语言模型&#xff08;LLMs&#xff09;&#xff0c;却不知该如何估算所需的 GPU 内存&#xff1f;在项目预算有限的情况下&#xff0c;是否曾因为 GPU 内存估算不准而导致资源浪费或性能不足&#xff1f;这些问题不仅影响项目进度&#xff0c;还可…

小北的技术博客:探索华为昇腾CANN训练营与AI技术创新——Ascend C算子开发能力认证考试(初级)

前言 哈喽哈喽友友们&#xff0c;这里是zyll~&#xff08;小北&#xff09;智慧龙阁的创始人及核心技术开发者。在技术的广阔天地里&#xff0c;我专注于大数据与全栈开发&#xff0c;并致力于成为这一领域的新锐力量。通过智慧龙阁这个平台&#xff0c;我期望能与大家分享我的…

操作系统《实验三.银行家算法模拟》

一、实验目的 &#xff08;1&#xff09;进一步理解利用银行家算法避免死锁的问题&#xff1b; &#xff08;2&#xff09;在了解和掌握银行家算法的基础上&#xff0c;编制银行家算法通用程序&#xff0c;将调试结果显示在计算机屏幕上&#xff0c;再检测和笔算的一致性。 &am…

CAD-vsto二次开发对应的版本及framework选择问题

首先&#xff0c;下载vs需要到vs的官网:Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器。 CAD的官网&#xff1a;Autodesk 欧特克官网-三维设计、工程和施工软件 https://www.autodesk.com.cn/ CAD版本对应的.NET版本网址&#xff1a;版本搭配 .netframework …