C# 中通过CancellationTokenSource实现对超时任务的取消

简介: 在基于Task的任务执行过程中,我们通常使用CancellationTokenSource来实现任务取消,首先看一个简单的例子。var cancelTokenSource = newCancellationTokenSource();Task.

在基于Task的任务执行过程中,我们通常使用CancellationTokenSource来实现任务取消,首先看一个简单的例子。

var cancelTokenSource = newCancellationTokenSource();

Task.Factory.StartNew(() =>
{
while (!cancelTokenSource.IsCancellationRequested)
{
Console.WriteLine(DateTime.Now);
Thread.Sleep(1000);
}
}, cancelTokenSource.Token);

Console.WriteLine("Press any key to cancel");
Console.ReadLine();
cancelTokenSource.Cancel();
Console.WriteLine("Done");
Console.ReadLine();


很多时候,除了像上例中的那样手动取消外,我们往往也要对任务设置一个预期执行时间,对超时的任务自动取消。之前一般做法是新启动一个计时器,在计时器的超时回调中执行CancellationTokenSource.Cancel方法。在.Net 4.5中,该操作得到了进一步的简化,我们可以通过在创建CancellationTokenSource时设置超时来实现这一功能。

var cancelTokenSource = newCancellationTokenSource(3000);

除此之外,也可以通过如下代码实现同样的效果。

cancelTokenSource.CancelAfter(3000);


希望以上分享对初学朋友有些帮助,谢谢!更多关注付义方技术博客:http://blog.csdn.net/fuyifang

目录
相关文章
|
3月前
|
C# UED SEO
C# 异步方法async / await任务超时处理
通过使用 `Task.WhenAny`和 `Task.Delay`方法,您可以在C#中有效地实现异步任务的超时处理机制。这种方法允许您在指定时间内等待任务完成,并在任务超时时采取适当的措施,如抛出异常或执行备用操作。希望本文提供的详细解释和代码示例能帮助您在实际项目中更好地处理异步任务超时问题,提升应用程序的可靠性和用户体验。
121 3
|
SQL 开发框架 算法
C#多线程开发-任务并行库04
C#多线程开发-任务并行库04
159 0
C#多线程开发-任务并行库04
|
存储 API C#
C#多线程(15):任务基础③
任务基础一共三篇,本篇是第三篇,之后开始学习异步编程、并发、异步I/O的知识。 本篇会继续讲述 Task 的一些 API 和常用的操作。
190 0
|
API C#
C#多线程(14):任务基础②
C#多线程(14):任务基础②
214 0
C#多线程(14):任务基础②
|
监控 安全 Java
C#多线程(13):任务基础①
C#多线程(13):任务基础①
166 0
|
存储 安全 Java
C# 之 异步多线程任务相关以及概念使用介绍
C#异步多线程Task的介绍和使用,从相关关键字到使用示例,详细解析Task和TaskCompletionSource的使用方法。
527 0
C# 之 异步多线程任务相关以及概念使用介绍
|
C#
C#编程任务: 把工作交给别人并等待其执行完成
生活中有这样的场景:  我有一件事情需要别人帮忙去办, 但是别人也很忙呀, 所以我只能把任务记载他的任务清单上, 等他一个个扫下来扫到我的并且完成之后再来告诉我. 这其实是一个多线程的问题. 我是线程A, 他是线程B, 这里我是生产者, 他是消费者.
1045 0
|
C#
C#嵌套任务和子任务
  任务嵌套就是指在一个任务中又创建了一个任务,而这个新建的任务,就被称为子任务。在没有特殊声明的情况下,父子任务是一起运行的,如SimpleNestedTask方法。  如果想让父子任务关联起来的话,需要在创建子任务的时候,增加参数TaskCreationOptions.AttachedToParent,将父子任务关联起来,这样父任务将等待子任务完成,才会完成。
870 0