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();
}
相关推荐
YuanlongWang3 小时前
C# 基础——装箱和拆箱
java·开发语言·c#
QQ12958455048 小时前
C# 如何能够创建一个MVC的WEB项目
c#·mvc
星河队长11 小时前
VS创建C++动态库和C#访问过程
java·c++·c#
William_cl11 小时前
【C# MVC 前置】异步编程 async/await:从 “卡界面” 到 “秒响应” 的 Action 优化指南(附微软官方避坑清单)
microsoft·c#·mvc
yong999012 小时前
C#驱动斑马打印机实现包装自动打印
java·数据库·c#
Jose_lz12 小时前
C#开发学习杂笔(更新中)
开发语言·学习·c#
mingupup13 小时前
WPF/C#:使用Microsoft Agent Framework框架创建一个带有审批功能的终端Agent
c#·wpf
YuanlongWang15 小时前
C# 设计模式——单例模式
单例模式·设计模式·c#
YuanlongWang15 小时前
C#基础——GC(垃圾回收)的工作流程与优化策略
java·jvm·c#
YuanlongWang16 小时前
C# 基础——多态的实现方式
java·c#