当前位置: 首页 > 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.lryc.cn/news/584327.html

相关文章:

  • HOOK专题
  • Linux流量分析:tcpdump wireshark
  • EchoSight-Pro发布说明
  • 【网络】Linux 内核优化实战 - net.ipv4.tcp_fin_timeout
  • Android Coil 3 data加载图的Bitmap或ByteArray数据类型,Kotlin
  • 设计总监年中复盘:用Adobe XD内容识别布局,告别“手动调距”
  • 大模型在膀胱癌诊疗全流程预测及应用研究报告
  • HarmonyOS AI辅助编程工具(CodeGenie)UI生成
  • RabbitMQ 高级特性之消息分发
  • web 系统对接飞书三方登录完整步骤实战使用示例
  • 网络安全(初级)(1)
  • AI+低代码双引擎驱动:重构智能业务系统的产品逻辑
  • Fiddler中文版全面评测:功能亮点、使用场景与中文网资源整合指南
  • 深入理解机器学习
  • CPU调度调度算法
  • 链表算法之【合并两个有序链表】
  • Web后端开发工程师AI协作指南
  • 【java面试day4】redis缓存-数据持久化
  • AI赋能生活:深度解析与技术洞察
  • 【论文阅读】Decoupled Knowledge Distillation
  • Spring Boot 整合 RabbitMQ
  • 大语言模型驱动智能语音应答:技术演进与架构革新
  • Java Reference类及其实现类深度解析:原理、源码与性能优化实践
  • 聊一聊 Linux 上对函数进行 Hook 的两种方式
  • 使用EasyExcel动态合并单元格(模板方法)
  • Centos 7下使用C++使用Rdkafka库实现生产者消费者
  • Houdini 分布式解算效率瓶颈突破:渲染 101 云集群实战指南
  • 编程实践:单例模式(懒汉模式+饿汉模式)
  • 面试技术问题总结一
  • android TabLayout 标题栏切换 事件拦截