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

C#中异步任务取消:CancellationToken

目录

典型写法(直接记)

详细使用方法

示例1:基本取消操作

示例2:task版本的并发取消和超时控制

注意:

常用写法

写法1:必需参数(推荐内部使用)

写法2:可选参数(异步任务的重载)

任务取消时的对策

提前返回

记得善后

1. 使用 try-catch-finally 或 using

2. 使用 token.Register() 注册取消回调

实际使用示例


推荐异步方法都带上 CancellationToken 这一传参。可以不用,但你不能没有!!

典型写法(直接记)

// 1. CancellationTokenSource - 取消令牌的发布者 常规写法直接记
var cts = new CancellationTokenSource();// 2. CancellationToken - 取消令牌本身
CancellationToken token = cts.Token;// 3. 发起取消请求
cts.Cancel();// 4. 检查是否被取消
if (token.IsCancellationRequested)
{// 处理取消逻辑
}

详细使用方法

示例1:基本取消操作

async void Main()
{var cts = new CancellationTokenSource();try{// 创建一个10秒的延迟任务,支持取消var task = Task.Delay(10000, cts.Token);// 主线程等待2秒Thread.Sleep(2000);// 2秒后取消任务cts.Cancel();// 等待任务完成(会抛出取消异常)await task;}catch (TaskCanceledException ex){ex.Message.Dump("我被取消了");}finally{cts?.Dispose();  // 释放资源}
}

示例2:task版本的并发取消和超时控制

async void Main()
{var cts = new CancellationTokenSource();var token = cts.Token;var sw = Stopwatch.StartNew();try{// 创建一个2秒后自动取消的任务var cancelTask = Task.Run(async () => {await Task.Delay(2000);cts.Cancel();});// 创建一个5秒的延迟任务(会在2秒时被取消)var delayTask = Task.Delay(5000, token);// 等待延迟任务(会被取消)
http://www.xdnf.cn/news/15004.html

相关文章:

  • qemu vcpu的创建过程
  • 前缀和|差分
  • Java学习---JVM(1)
  • easyui碰到想要去除顶部栏按钮边框
  • 应用层协议 HTTP
  • Thrust库介绍与使用
  • LangGraph-2-interrupt 流程中断
  • Language Models are Few-Shot Learners: 开箱即用的GPT-3(二)
  • MacOS 终端(Terminal)配置显示日期时间
  • 亚矩阵云手机破解Maio广告平台多账号风控:从“生存焦虑”到“规模化增长”的终极方案
  • OneFileLLM:一键聚合多源信息流
  • AI探索 | 豆包智能助手跟扣子空间(AI办公助手)有什么区别
  • [Meetily后端框架] AI摘要结构化 | `SummaryResponse`模型 | Pydantic库 | vs marshmallow库
  • Qt Creator控件及其用途详细总结
  • CH9121T电路及配置详解
  • AI驱动的业务系统智能化转型:从非结构化到结构化的智能转换
  • 【深度学习新浪潮】什么是持续预训练?
  • 从零开始搭建深度学习大厦系列-2.卷积神经网络基础(5-9)
  • C++类对象多态底层原理及扩展问题
  • Excalidraw:一款轻量、高效、极具手感的在线白板工具
  • 18th Day| 654.最大二叉树, 617.合并二叉树, 700.二叉搜索树中的搜索,98.验证二叉搜索树
  • 微算法科技的前沿探索:量子机器学习算法在视觉任务中的革新应用
  • 虚拟储能与分布式光伏协同优化:新型电力系统的灵活性解决方案
  • Mac自定义右键功能
  • ThinkBook 14s IWL(20RM)OEM系统镜像原厂Win10系统
  • @Schema是什么?
  • C++之string类的实现代码及其详解(下)
  • Flowable21条件事件------------持续更新中
  • 【Linux手册】从接口到管理:Linux文件系统的核心操作指南
  • 《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】