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

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.dtcms.com/a/272279.html

相关文章:

  • 【C++详解】STL-list模拟实现(深度剖析list迭代器,类模板未实例化取嵌套类型问题)
  • 【TCP/IP】10. 引导协议与动态主机配置协议
  • prometheus+grafana接入nginx实战
  • 零成本实现商品图换背景
  • 静态路由实验(2)
  • Vue3 深度解析:渲染器与渲染函数的奥秘
  • 【PTA数据结构 | C语言版】链式栈的3个操作
  • linux 4.14 kernel屏蔽arm arch timer的方法
  • 网络编程与自动化
  • 高亚科技签约奕源金属,助力打造高效智能化采购管理体系
  • Flask 入门教程:用 Python 快速搭建你的第一个 Web 应用
  • 在 Ubuntu 上安装和配置 Kafka
  • 下一代防火墙-终端安全防护
  • 普林斯顿大学DPPO机器人学习突破:Diffusion Policy Policy Optimization 全新优化扩散策略
  • Eigen 几何模块深拆:Isometry3d vs Affine3d + 变换矩阵本质详解
  • OSPF协议:核心概念与配置要点解析
  • 虚拟项目[3D物体测量]
  • 从真人到数字分身:3D人脸扫描设备在高校数字人建模教学中的应用
  • 强化学习 MDP
  • Selenium 4 教程:自动化 WebDriver 管理与 Cookie 提取 || 用于解决chromedriver版本不匹配问题
  • 《PyQt6-3D:开启Python 3D开发新世界》
  • Windows Edge 播放 H.265 视频指南
  • OpenAI正准备推出一款搭载人工智能功能的网络浏览器,试图直接挑战Alphabet旗下
  • 前端面试专栏-算法篇:21. 链表、栈、队列的实现与应用
  • NAT技术(网络地址转换)
  • 【实战】使用 ELK 搭建 Spring Boot Docker 容器日志监控系统
  • OSPF实验以及核心原理全解
  • 【SkyWalking】配置告警规则并通过 Webhook 推送钉钉通知
  • HP EVA SAN 数据恢复利器:Data recovery plugin for HP StorageWorks EVA
  • 前端项目集成husky + lint-staged + commitlint