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();
}
相关推荐
软泡芙9 小时前
【C# 】各种等待大全:从入门到精通
开发语言·c#·log4j
夏霞10 小时前
IIS 应用程序池 3 种标识:ApplicationPoolIdentity / LocalSystem / LocalService 权限区别(超清晰)
c#·.net
SteveDraw10 小时前
常见的设计模式及工业场景下应用(更新中)
设计模式·c#·编码规范·gof23
weixin_5206498719 小时前
WinForm数据展示组件ListView
c#
程序设计实验室1 天前
Spark.NET:一个试图把 Django / Rails 式开发体验带回 .NET 世界的全栈 Web 框架。
c#
byoass1 天前
智巢AI知识库深度解析:企业文档管理从大海捞针到精准狙击的进化之路
开发语言·网络·人工智能·安全·c#·云计算
njsgcs1 天前
solidworks自动标注折弯4 无向图 c#
开发语言·c#·solidworks
我是唐青枫1 天前
C#.NET ThreadLocal 深入解析:线程独享数据、性能收益与实战边界
c#·.net
JQLvopkk1 天前
C# 工业级上位机:交互实战
开发语言·c#·交互
kingwebo'sZone1 天前
PdfiumViewer使用权限控制期操作按钮(PdfViewer其实也可以完整兼容)
c#