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();
}
相关推荐
CoderIsArt5 小时前
C#中的CLR属性、依赖属性与附加属性
c#
IGP99 小时前
20250606-C#知识:委托和事件
开发语言·c#
Kookoos10 小时前
ABP VNext 与 Neo4j:构建基于图数据库的高效关系查询
数据库·c#·.net·neo4j·abp vnext
张鱼小丸子_微辣11 小时前
.Net Framework 4/C# LINQ*
c#
..活宝..13 小时前
【Emgu CV教程】11.2、Scharr边缘检测
图像处理·计算机视觉·c#·emgu cv·图像分析
yngsqq13 小时前
事件监听 ——CAD C#二次开发
c#
The Kite13 小时前
MPLAB X IDE 软件安装与卸载
ide·c#·嵌入式
张鱼小丸子_微辣16 小时前
.Net Framework 4/C# 集合和索引器
c#
布伦鸽16 小时前
C# WPF 左右布局实现学习笔记(1)
笔记·学习·c#·wpf
InCerry18 小时前
C# 模式匹配全解:原理、用法与易错点
c#