C# CancellationToken

C# CancellationToken详解

在 C# 中,CancellationToken 的核心类型,主要应用于异步操作、多线程任务或长时间运行的任务。以下是详细的讲解:

1. 概念

作用:允许一个任务/操作在外部被请求取消,任务自身会定期检查是否被取消请求,实现终止。

协作式:任务需要主动配合检查取消请求(不能强行终止线程)。

组成:

CancellationTokenSource:生成和管理 CancellationToken 的类。

CancellationToken:传递给任务的结构体,用于传递"取消信号"。

2. 基本用法
步骤 1:创建 CancellationTokenSource 和 Token

var cts = new CancellationTokenSource();

CancellationToken token = cts.Token;

步骤 2:将 Token 传递给任务

Task.Run(() =>

{

// 任务逻辑

}, token);

步骤 3:触发取消

cts.Cancel(); // 请求取消所有关联 Token 的任务

3. 在任务中处理取消
轮询检查 Token

public void LongRunningOperation(CancellationToken token)

{

while (!token.IsCancellationRequested)

{

// 持续工作...

Thread.Sleep(1000);

}

// 清理资源,优雅退出

ct.Register(() => Console.WriteLine("ClearResources));

抛出取消异常

当需要直接终止操作时,可以通过抛出 OperationCanceledException 来快速响应取消请求:

token.ThrowIfCancellationRequested(); // 如果取消已请求,抛出异常

4. 高级特性
注册取消回调

当取消被触发时,执行指定的回调函数(如释放资源):

token.Register(() =>

{

Console.WriteLine("清理资源,取消已触发!");

});

超时自动取消

利用 CancellationTokenSource 设置超时时间,自动触发取消:

var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5)); // 5秒后自动取消

组合 Token(链接)

将多个 CancellationToken 组合成一个,任一触发则全部取消:

var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(token1, token2);

var linkedToken = linkedCts.Token;

5. 异常处理

取消操作通常会引发两种异常:

  • OperationCanceledException
  • TaskCanceledException(继承自前者)

try

{

await MyAsyncMethod(token);

}

catch (OperationCanceledException)

{

Console.WriteLine("操作已被取消。");

}

相关推荐
社交怪人16 分钟前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
郭涤生1 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588
山居秋暝LS1 小时前
【无标题】RTX00安装paddle OCR,win11不能装最新的,也不能用GPU
开发语言·r语言
卢锡荣1 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
Xin_ye100861 小时前
C# 零基础到精通教程 - 第七章:面向对象编程(入门)——类与对象
开发语言·c#
rockey6271 小时前
AScript异步执行与await关键字
c#·.net·script·eval·expression·异步执行·动态脚本
AI科技星2 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
审判长烧鸡2 小时前
【Go工具】go-playground是什么组织?官方的?
开发语言·安全·go
kkeeper~2 小时前
0基础C语言积跬步之字符函数与字符串函数(上)
c语言·开发语言
hhb_6183 小时前
Swift核心技术难点与实战案例解析
开发语言·ios·swift