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();
}
相关推荐
军训猫猫头4 小时前
52.this.DataContext = new UserViewModel(); C#例子 WPF例子
开发语言·c#·wpf
AI+程序员在路上8 小时前
C#调用c++dll的两种方法(静态方法和动态方法)
c++·microsoft·c#
数据的世界0110 小时前
C#中的语句
服务器·c#
装疯迷窍_A10 小时前
ARCGIS国土超级工具集1.3更新说明
arcgis·c#·插件·变更调查·尖锐角·狭长
秋月的私语13 小时前
c#实现当捕获异常时自动重启程序
运维·c#
叫我少年16 小时前
C# 中使用 gRPC 通讯
c#·grpc·类库封装
步、步、为营16 小时前
C# 通用缓存类开发:开启高效编程之门
缓存·c#·.net
军训猫猫头16 小时前
54.DataGrid数据框图 C#例子 WPF例子
ui·c#·wpf
Maybe_ch17 小时前
ASP.NET Blazor部署方式有哪些?
后端·c#·asp.net·blazor
规划GIS会18 小时前
【ArcGIS Pro二次开发】(86):C#问号运算符(?)的用法
c#