windows C#-取消任务列表(上)
如果不想等待异步控制台应用程序完成,可以取消该应用程序。 通过遵循本文的示例,可将取消添加到下载网站内容的应用程序。 可通过将 CancellationTokenSource 实例与每个任务进行关联来取消多个任务。 如果选择 Enter 键,则将取消所有尚未完成的任务。
创建示例应用程序
创建新的 .NET Core 控制台应用程序。 可通过使用 dotnet new console 命令或从 Visual Studio 进行创建。 在你最喜欢的编辑器中打开 Program.cs 文件。
替换 using 语句
将现有 using 语句替换为以下声明:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
添加字段
在 Program 类定义中,添加以下三个字段:
static readonly CancellationTokenSource s_cts = new CancellationTokenSource();static readonly HttpClient s_client = new HttpClient
{MaxResponseContentBufferSize = 1_000_000
};static readonly IEnumerable<string> s_urlList = new string[]
{"https://learn.microsoft.com","https://learn.microsoft.com/aspnet/core","https://learn.microsoft.com/azure","https://learn.microsoft.com/azure/devops","https://learn.microsoft.com/dotnet","https://learn.microsoft.com/dynamics365","https://learn.microsoft.com/education","https://learn.microsoft.com/enterprise-mobility-security","https://learn.microsoft.com/gaming","https://learn.microsoft.com/graph","https://learn.microsoft.com/microsoft-365","https://learn.microsoft.com/office","https://learn.microsoft.com/powershell","https://learn.microsoft.com/sql","https://learn.microsoft.com/surface","https://learn.microsoft.com/system-center","https://learn.microsoft.com/visualstudio","https://learn.microsoft.com/windows","https://learn.microsoft.com/maui"
};
CancellationTokenSource 用于向 CancellationToken 发出请求取消的信号。 HttpClient 公开发送 HTTP 请求和接收 HTTP 响应的能力。 s_urlList 包括应用程序计划处理的所有 URL。
更新应用程序入口点
控制台应用程序的主入口点是 Main 方法。 将现有方法替换为以下内容:
static async Task Main()
{Console.WriteLine("Application started.");Console.WriteLine("Press the ENTER key to cancel...\n");Task cancelTask = Task.Run(() =>{while (Console.ReadKey().Key != ConsoleKey.Enter){Console.WriteLine("Press the ENTER key to cancel...");}Console.WriteLine("\nENTER key pressed: cancelling downloads.\n");s_cts.Cancel();});Task sumPageSizesTask = SumPageSizesAsync();Task finishedTask = await Task.WhenAny(new[] { cancelTask, sumPageSizesTask });if (finishedTask == cancelTask){// wait for the cancellation to take place:try{await sumPageSizesTask;Console.WriteLine("Download task completed before cancel request was processed.");}catch (TaskCanceledException){Console.WriteLine("Download task has been cancelled.");}}Console.WriteLine("Application ending.");
}
目前将已更新的 Main 方法视为异步 main 方法,这允许将异步入口点引入可执行文件中。 将几条说明性消息写入控制台,然后声明名为 cancelTask 的 Task 实例,这将读取控制台密钥笔画。 如果按 Enter,则会调用 CancellationTokenSource.Cancel()。 这将发出取消信号。 下一步,从 SumPageSizesAsync 方法分配 sumPageSizesTask 变量。 然后,将这两个任务传递到 Task.WhenAny(Task[]),这会在完成两个任务中的任意一个时继续。
下一个代码块可确保在取消得到处理之前不会退出应用程序。 如果要完成的第一个任务是 cancelTask,则等待 sumPageSizeTask。 如果已取消,则等待时会引发 System.Threading.Tasks.TaskCanceledException。 块捕获该异常,并输出消息。
相关文章:
windows C#-取消任务列表(上)
如果不想等待异步控制台应用程序完成,可以取消该应用程序。 通过遵循本文的示例,可将取消添加到下载网站内容的应用程序。 可通过将 CancellationTokenSource 实例与每个任务进行关联来取消多个任务。 如果选择 Enter 键,则将取消所有尚未完成…...
Linux---ps命令
Linux ps 命令 | 菜鸟教程 (runoob.com) process status 用于显示进程的状态 USER: 用户名,运行此进程的用户名。PID: 进程ID(Process ID),每个进程的唯一标识号%CPU: 进程当前使用的CPU百分比%MEM: 进程当前使用的…...
解决k8s拉取私有镜像401 Unauthorized 问题
拉取镜像时未指定账户和密码通常是因为需要访问的镜像仓库启用了认证,但 Kubernetes 默认配置中未提供访问凭据。要解决此问题,可以按照以下步骤配置镜像仓库的认证信息: 1. 创建 Kubernetes Secret 为镜像仓库配置访问凭据,使用…...
Ruby 模块(Module)
Ruby 模块(Module) 概述 Ruby 是一种动态、开放源代码的编程语言,以其简洁明了的语法和强大的功能而闻名。在 Ruby 中,模块(Module)是一个重要的概念,它用于封装一组相关的方法和常量。模块提…...
HAL库的简单介绍以及环境搭建
目录 引言 一、HAL库的基本介绍 二、HAL库开发环境搭建 1、安装JAVA运行环境 2、安装STM32CubeMX 3、在线下载芯片支持包 引言 前面,我们学习了STM32基于寄存器的开发方式,能够更接近底层,但是随着我们学习的越来越深、代码越来与复杂…...
如何在 PyCharm 中配置 HTTP 代理以确保网络连接的顺畅性
如何在 PyCharm 中配置 HTTP 代理以确保网络连接的顺畅性 在配置 PyCharm 的 HTTP 代理以确保网络连接的顺畅性时,需按照一定的步骤进行设置,这不仅有助于确保 PyCharm 能够顺利访问互联网资源,还能保证插件和工具的正常更新与同步。以下是详…...
PHP 8.4 重磅发布了
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
LVM缩容
当前环境 rootjmk:~/shell# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS nvme0n1 259:0 0 953.9G 0 disk |-nvme0n1p1 259:1 0 512M 0 part /boot/efi |-nvme0n1p2 259:2 0 488M 0 part /boot -nvme0n1p3 …...
Next.js 独立开发教程(三):CSS 样式的完整指南
系列文章目录 Next.js 开发教程(一):入门指南-CSDN博客 Next.js 开发教程(二):从零构建仪表盘应用-CSDN博客 有兴趣的可以蹲个后续,我会陆续发布一系列的文章。 目录 系列文章目录 1. 样式在 Next.js 中的基本支持…...
React (三)
文章目录 项目地址十二、性能优化12.1 使用useMemo避免不必要的计算12.2 使用memo缓存组件,防止过度渲染12.3 useCallBack缓存函数12.4 useCallBack里访问之前的状态(没懂)十三、Styled-Components13.1 安装13.2给普通html元素添加样式13.3 继承和覆盖样式13.4 给react组件添…...
Python数据结构之链表
一、链表 1、目的 解决顺序表存储数据有上限,并且插入和删除操作效率低的问题。 2、概念 链表:链式存储的线性表,使用随机的物理内存存储逻辑上连续的数据。 链表的组成:由一个个结点组成 结点:由数据域和链接域组…...
“LLM是否是泡沫”
目录 “LLM是否是泡沫” 培养自己鉴别论文价值的能力、复现开源项目的能力、debug 代码的能力 llm 是生产力工具 多去找实习,读再多的论文,刷再多的技术文章,也不如一次 debug 多机通讯报错带来的认知深刻 一、LLM领域的发展与挑战 二、…...
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)…...
算法(Algorithm)
算法(Algorithm) 是指解决问题或完成特定任务的一系列明确指令的集合。它是按照一定规则定义的一种计算过程,用于将输入转化为输出,能够被计算机或人类有效执行。 算法的核心特点 有穷性 算法必须在有限步骤内完成,不能…...
C语言中const char *字符进行切割实现
将127.0.0.1以“”“.”来进行切割,实现如下: const char * ip "127.0.0.1";char *test new char[100];strcpy(test, ip);const char *split ".";char *final;final strtok(test, split);while (final){printf("%s\n"…...
【UE5】在材质中计算模型在屏幕上的比例
ViewProperty节点有很多有意思的变量 例如用 ViewProperty 的 tan ( FOV / 2 ) \tan(\text{FOV} / 2) tan(FOV/2) 输出,用它计算模型占屏幕的比例。 (常用于for运算的次数优化,也可以用于各种美术效果) ScaleOnScreen Obje…...
前端速通(HTML)
1. HTML HTML基础: 什么是HTML? 超文本: "超文本"是指通过链接连接不同网页或资源的能力。HTML支持通过<a>标签创建超链接,方便用户从一个页面跳转到另一个页面。 标记语言: HTML使用一组预定义的标签…...
订单日记为“惠采科技”提供全方位的进销存管理支持
感谢温州惠采科技有限责任公司选择使用订单日记! 温州惠采科技有限责任公司,成立于2024年,位于浙江省温州市,是一家以从事销售电气辅材为主的企业。 在业务不断壮大的过程中,想使用一种既能提升运营效率又能节省成本…...
Linux:文件管理(一)
目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说,如果在电脑上新建了一个空白文档࿰…...
鸿蒙多线程开发——线程间数据通信对象03(sendable)
1、简 介 在传统JS引擎上,对象的并发通信开销的优化方式只有一种,就是把实现下沉到Native侧,通过Transferable对象的转移或共享方式降低并发通信开销。而开发者仍然还有大量对象并发通信的诉求,这个问题在业界的JS引擎实现上并没…...
BetterJoy终极指南:3分钟让你的Switch手柄变身PC游戏神器
BetterJoy终极指南:3分钟让你的Switch手柄变身PC游戏神器 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.c…...
泰拉瑞亚地图编辑器:从像素画布到创意世界的蜕变之旅
泰拉瑞亚地图编辑器:从像素画布到创意世界的蜕变之旅 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! It also lets you cha…...
市面上有哪些是真正安全的降AIGC网站(轻松压低AI生成疑似率)
最崩溃的不是查重难题,而是查重达标却AI率超标亮红灯!很多工具只会简单同义词替换、浅层改字,根本洗不掉AI专属句式、行文逻辑和高频模板话术,学校AIGC检测一查一个准,论文直接凉凉。 本篇结合全网实测数据,…...
8051编译器优化:LCALL与LJMP指令替换原理与实践
1. C51编译器优化:LCALL与LJMP指令替换解析 在8051单片机开发中,C51编译器对代码的优化处理常常会让开发者感到困惑。最近我就遇到一个典型案例:在反汇编代码中,原本预期的LCALL指令被替换成了LJMP。这种现象其实反映了编译器在资…...
扫地机器人行业 企业篇-石头科技
石头科技成立于2014年,2016年为小米代工推出首款米家扫地机器人,凭借自研LDS激光雷达导航技术快速打开市场。2020年登陆科创板,此后逐步减少对小米的依赖,专注自有品牌Roborock,定位高端市场。公司性质为A股科创板上市公司,总部位于北京。截至2025年6月底,研发人员规模达…...
手把手教你无损转换:把老电脑的Legacy启动盘改成UEFI+GPT(附DiskGenius操作截图)
老电脑焕新指南:从Legacy到UEFIGPT的无损迁移实战当你的老电脑开机速度越来越慢,或者被Windows 11的安装要求拒之门外时,很可能是因为它还在使用传统的Legacy启动方式和MBR分区表。本文将带你深入了解这两种启动方式的区别,并手把…...
Terraform 实战:用 for 表达式将列表元素转换为大写
Terraform 技巧:使用 for 表达式将列表元素转换为大写 在 Terraform 配置中,我们经常需要对列表中的字符串进行批量转换,例如将小写名称统一转为大写,以满足某些标签规范或命名约定。本文以 var.names 列表为例,演示如何通过 for 表达式结合 upper 函数,生成一个全大写的…...
医学影像AI迁移学习:如何科学选择预训练数据集?
1. 项目概述在医学影像分析这个对精度和可靠性要求极高的领域,迁移学习已经成为解决数据稀缺问题的关键技术路径。其核心逻辑很直观:与其在有限的目标数据上从头训练一个复杂的深度学习模型,不如先在一个庞大的、通用的源数据集上“预训练”模…...
iOS Frida spawn失败排查:Bundle ID匹配与MobileInstallation缓存解析
1. 这个报错不是App没装,而是Frida根本“看不见”它刚接触iOS逆向的朋友常被这句报错卡住好几天:“Failed to spawn: unable to find application with identifier”。第一反应是——我明明在手机上装了这个App,图标就在主屏,为什…...
mysql视图和用户管理
视图 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。视图很简单,就是把我们后面的select之前我们使用的时候是形成一…...
