C# 组合CancellationTokenSource的使用

前言

在异步编程中,经常需要使用CancellationToken来取消任务的执行。

但是通常情况下,一个耗时任务还需要有超时机制。那个如何让一个任务既可以超市自动取消也可以手动取消?

组合CancellationTokenSourced的使用

csharp 复制代码
//创建两个cts(一个手动取消,一个超时取消)
CancellationTokenSource cancellCts= new CancellationTokenSource();
CancellationTokenSource timeOutCts = new CancellationTokenSource(1000);
//将两个cts组合
CancellationTokenSource compositeCts = CancellationTokenSource.CreateLinkedTokenSource(cancellCts.Token, timeOutCts.Token);
try
{
	//执行异步耗时任务
	await DoLongTimeTask(compositeCts.Token)
}
catch (OperationCanceledException)
{
    if (cancellCts.Token.IsCancellationRequested)
    {   
    	//手动取消 
        throw new OperationCanceledException();
    }
    else if (timeOutCts.Token.IsCancellationRequested)
    {
    	//超时取消
        throw new TimeoutException();
    }
}
finally
{
	cancellCts.Dispose();
   timeOutCts.Dispose();
   compositeCts.Dispose();
}
相关推荐
八苦5 小时前
如何用c# 做 mcp/ChatGPT app
c#·mcp
人工智能AI技术6 小时前
DeskClaw Windows上线|C#开发AI桌面助手,轻量内核源码解析
人工智能·c#
似水明俊德7 小时前
04-C#.Net-委托和事件-面试题
java·开发语言·面试·c#·.net
程序员老乔10 小时前
Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(二):Valhalla落地,值类型如何让电商DTO内存占用暴跌
java·spring boot·c#
祝大家百事可乐10 小时前
嵌入式——02 数据结构
c++·c#·硬件工程
我是唐青枫11 小时前
深入理解 C#.NET TaskScheduler:为什么大量使用 Work-Stealing
c#·.net
唯情于酒13 小时前
net core web api 使用log4net
c#·.net core
SunnyDays101113 小时前
C# 实战:快速查找并高亮 Word 文档中的文字(普通查找 + 正则表达式)
开发语言·c#
人工智能AI技术13 小时前
Qwen3.5-Plus登顶|C#集成通义千问,高并发服务实战优化
人工智能·c#
SunnyDays101114 小时前
如何使用 C# 在 Word 文档中插入超链接 (含文本与图片链接)
开发语言·c#