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

取消退出流程控制方法

在自动化设备动作流程中,人为任意想取消当前动作,常见方法是使用全局变量,实时检测变量决定退出。这里介绍一个System.Threading空间下的 CancellationTokenSource类,他可以设置超时,设置信息等封装

基本使用超时和手动设置退出

CancellationTokenSource:用于控制和生成CancellationToken

CancellationToken:取消令牌,可以注册取消回调等操作

1、先实例化CancellationTokenSource

2、注册取消回调

3、启动一个Task,模拟耗时操作

4.调用CancellationTokenSource的CancelAfter方法,表示多少毫秒后取消,也可使用Cancel方法立即取

5、IsCancellationRequested属性判断任务是否取消,没取消则一直输出i

抛出异常退出

以下举例 async await的异步使用,用到CancellationToken来取消任务,并手动设置抛异常传达信息

[HttpGet]public async Task<IActionResult> CancelDownLoad(CancellationToken cancellationToken){try{var _client = _httpClient.CreateClient("bigDownLoad");_client.DefaultRequestHeaders.Range = new RangeHeaderValue(0, 1024 * 1024 * 50);await Task.Delay(1000);if (!cancellationToken.IsCancellationRequested){var resp = await _client.GetAsync("http://du.cainiaoxt.cn/dd.php/windows_7_ultimate_x64_2023.iso",cancellationToken);if (resp.StatusCode != System.Net.HttpStatusCode.OK){string chunkFileFolder = @"D:\";string bigFileName = chunkFileFolder + @"\bigFile" + new Random().Next(0, 10);using (FileStream fs = new FileStream(bigFileName, FileMode.Create)){var respStream = await resp.Content.ReadAsStreamAsync();await respStream.CopyToAsync(fs);await respStream.FlushAsync();}}return Ok();}else{  // 设置抛异常退出cancellationToken.ThrowIfCancellationRequested();return BadRequest("下载任务取消!");}}catch (OperationCanceledException ex){Console.WriteLine("下载任务取消!"+ex.Message);return BadRequest("下载任务取消!");}}

关联退出

另外可以设置退出链接,多个关联全部退出

// See https://aka.ms/new-console-template for more information
CancellationTokenSource cts=new CancellationTokenSource();
cts.Token.Register(() => { Console.WriteLine("任务1已停止"); });CancellationTokenSource cts2 = new CancellationTokenSource();
cts2.Token.Register(() => { Console.WriteLine("任务2已停止"); });CancellationTokenSource cts3 = new CancellationTokenSource();
cts3.Token.Register(() => { Console.WriteLine("任务3已停止"); });
var linkTokenSource=CancellationTokenSource.CreateLinkedTokenSource(cts.Token, cts2.Token, cts3.Token);linkTokenSource.Token.Register(() => { Console.WriteLine("关联token取消"); });
Task.Run(() =>
{int i = 1;while (!cts.IsCancellationRequested){i++;Console.WriteLine("任务1:"+i);Task.Delay(500).Wait();}});Task.Run(() =>
{int i = 1;while (!cts2.IsCancellationRequested){i++;Console.WriteLine("任务2:"+i);Task.Delay(500).Wait();}});Task.Run(() =>
{int i = 1;while (!cts3.IsCancellationRequested){i++;Console.WriteLine("任务3:"+i);Task.Delay(500).Wait();}});Task.Run(() =>
{int i = 1;while (!linkTokenSource.IsCancellationRequested){i++;Console.WriteLine("关联token任务:" + i);Task.Delay(500).Wait();}});var key=Console.ReadKey();
if(key.Key==ConsoleKey.A)
{cts.Cancel();
}
Console.ReadLine();

相关文章:

取消退出流程控制方法

在自动化设备动作流程中&#xff0c;人为任意想取消当前动作&#xff0c;常见方法是使用全局变量&#xff0c;实时检测变量决定退出。这里介绍一个System.Threading空间下的 CancellationTokenSource类&#xff0c;他可以设置超时&#xff0c;设置信息等封装 基本使用超时和手…...

力扣-跳跃游戏

问题 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 解答 class Solu…...

李沐动手学习深度学习——3.2练习

以下是个人理解&#xff0c;希望进行讨论求解。 练习 1. 如果我们将权重初始化为零&#xff0c;会发生什么。算法仍然有效吗&#xff1f; 根据SGD算法公式如上&#xff0c;第一次迭代的值可知w只与b相关&#xff0c;而对于b的迭代更新&#xff0c;只是与b的初始值相关&#x…...

代码随想录Day20 | Leetcode77 组合

题目 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ]示例 2&#xff1a; 输入&#xff1a;n 1, k 1 …...

Android Duplicate class 排除重复类

一、起因&#xff1a; 在迭代开发的时候&#xff0c;发现2个ijk很多类重复。但又2个库实现的功能是不一样&#xff0c;目前不能合并。但又想保留2个功能。需要排除其中一个库。 二、报错如何下图&#xff1a; 三、解决方法&#xff1a; 3.1 在terminal 也就是命令行处输入 …...

【Kubernetes】服务(Service)是什么?有什么用?有哪些类型?

系列文章目录 K8s中的Namespace是什么&#xff1f; Kubernetes 集群的组件介绍 Kubernetes 对象是什么&#xff1f; Pod——k8s中最重要的对象之一 Kubernetes 和 Docker 之间有什么区别&#xff1f; 部署安装 K8s 为什么要关闭 swap 分区&#xff1f; k8s中容器之间、pod之间…...

【前端素材】推荐优质后台管理系统DAdmin平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理网站、应用程序或系统的管理界面&#xff0c;通常由管理员和工作人员使用。它提供了访问和控制网站或应用程序后台功能的工具和界面&#xff0c;使其能够管理用户、内容、数据和其他各种功能。 2、功能需求 后台管理系…...

Redis高级特性详解:事务处理、发布订阅、持久化和集群

Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的基于内存的数据结构存储系统&#xff0c;被广泛应用于缓存、队列、计数器等场景中。除了基本的键值存储功能外&#xff0c;Redis还提供了许多高级特性&#xff0c;包括事务处理、发布订阅、持久化和集群。在…...

nwjs做自动化测试

分别是2个常用的自动化测试化框架 GitHub - nwutils/nw-selenium-javascript-example: An example of end-to-end testing with Selenium for NW.js apps via JavaScript GitHub - nwutils/nw-puppeteer-example: An example of using NW.js via Puppeteer. 看习惯使用哪个&…...

【前端素材】推荐优质在线特殊品牌商城电商网页eStore平台模板(附源码)

一、需求分析 1、系统定义 在线特殊品牌商城是指一个通过互联网提供特定品牌或特殊类型商品购买服务的电子商务平台。这类商城专注于某个特定品牌、设计风格或商品类型&#xff0c;为顾客提供独特、专业的购物体验。 2、功能需求 在线特殊品牌商城是指一个通过互联网提供特…...

Redis之一: 简介及环境安装搭建

什么是NoSQL? NoSQL&#xff0c;指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写&#xff0c;是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储。&#xff08;例如谷歌或Facebook每天为他们的用户收集万亿比特的数据&#xf…...

关于电脑一天24小时多少度电电脑的一天用电量计算

随着这几年物价的上涨&#xff0c;一些地区的电价越来越高&#xff0c;而我们经常需要使用电脑&#xff0c;那么一台电脑一天24小时用多少度电呢&#xff1f; 如何计算电脑一天的用电量&#xff1f; 让我们跟随小编来了解更多吧。 1、功耗、主机箱功耗 现在的计算机中&#xf…...

Unity3D 物理引擎的基本配置详解

前言 在Unity3D中&#xff0c;物理引擎主要由两部分组成&#xff1a;碰撞检测和物理模拟。在本文中&#xff0c;我们将详细介绍Unity3D物理引擎的基本配置&#xff0c;并给出相应的技术详解和代码实现。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以…...

CSS:弹性盒子Flexible Box布局

CSS:Flexible Box弹性盒子布局 一、flex布局原理 ​ flex是flexible Box的缩写,意为 ”弹性布局“&#xff0c;用来为盒状模型提供最大的灵活性&#xff0c;任何一个容器都可以指定为flex布局。 当我们的父盒子设置为flex布局之后&#xff0c;子元素的 float 、clear 和 vert…...

java常用环境docker安装

配置目录 rocketmqredismysql不配置binlog配置binlog Nacoszookeeper 本文为精简安装&#xff0c;部分不带容器卷映射&#xff0c;仅供以学习使用。 rocketmq nameservice sudo docker run -d \ --privilegedtrue \ --name rmqnamesrv \ -p 9876:9876 \ -e "MAX_HEAP_SI…...

Code-Audit(代码审计)习题记录6-7

介绍&#xff1a; 自己懒得搭建靶场了&#xff0c;靶场地址是 GitHub - CHYbeta/Code-Audit-Challenges: Code-Audit-Challenges为了方便在公网练习&#xff0c;可以随地访问&#xff0c;本文所有的题目均来源于网站HSCSEC-Code Audit 6、习题6 题目内容如下&#xff1a; 源代…...

go 的使用总结

go的内存逃逸&#xff1f; go语言在编辑阶段通过逃逸分析把分配在栈上变量 分配到堆上去。 栈内存&#xff1a; 一段连续的内存&#xff0c;便于高效运行指令过程中的临时变量存储。 堆内存&#xff1a; 主要由垃圾回收器 回收没有被引用的指针。 逃逸分析&#xff1a;栈内…...

无线水电表智能化管理系统

无线水电表智能化管理系统是一项利用先进技术对水电用量进行实时监测和精细管理的创新系统。这一系统通过应用无线通讯技术&#xff0c;实现了水电表数据的远程传输和集中管理&#xff0c;为用户提供了便捷、精准的用能监测和管理服务。 无线水电表智能化管理系统的首要优势在于…...

发掘效率黑科技:Allure报告助您事半功倍提升测试效能!

Allure 简介与安装 Allure 是由 Java 语⾔开发的⼀个轻量级&#xff0c;灵活的测试报告⼯具。 Allure 多平台的 Report 框架。 Allure ⽀持多语⾔&#xff0c;包括 python、JaveScript、PHP、Ruby 等。 可以为开发/测试/管理等人员提供详尽的的测试报告&#xff0c;包括测试…...

Spring Web 过滤器使用常见错误(上)

我们都知道&#xff0c;过滤器是 Servlet 的重要标准之一&#xff0c;其在请求和响应的统一处理、访问日志记录、请求权限审核等方面都有着不可替代的作用。在 Spring 编程中&#xff0c;我们主要就是配合使用ServletComponentScan 和 WebFilter 这两个注解来构建过滤器。 说起…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...