C# CancellationTokenSource 终止线程 CancellationTokenSource实现对超时任务的取消
2015-06-27 19:00
791 查看
C# 使用 CancellationTokenSource 终止线程
使用CancellationTokenSource对象需要与Task对象进行配合使用,Task会对当前运行的状态进行控制(这个不用我们关心是如何孔控制的)。而CancellationTokenSource则是外部对Task的控制,如取消、定时取消。下面我们来看看示例代码
class Program
{
//声明CancellationTokenSource对象
static CancellationTokenSource cancelTokenSource = new CancellationTokenSource();
//程序入口
static void Main(string[] args)
{
Task.Factory.StartNew(MyTask, cancelTokenSource.Token);
Console.WriteLine("请按回车键(Enter)停止");
Console.ReadLine();
cancelTokenSource.Cancel();//通知取消任务或者终止线程
Console.WriteLine("已停止");
Console.ReadLine();
}
//测试方法
static void MyTask()
{
//判断是否取消任务
while (!cancelTokenSource.IsCancellationRequested)
{
Console.WriteLine(DateTime.Now);
Thread.Sleep(1000);
}
}
}
.Net 4.5中通过CancellationTokenSource实现对超时任务的取消
在基于Task的任务执行过程中,我们通常使用CancellationTokenSource来实现任务取消,首先看一个简单的例子。();
.Factory.StartNew(() =>
{
(!cancelTokenSource.IsCancellationRequested)
{
.Now);
.Sleep(1000);
}
}, cancelTokenSource.Token);
);
.ReadLine();
cancelTokenSource.Cancel();
);
.ReadLine();
很多时候,除了像上例中的那样手动取消外,我们往往也要对任务设置一个预期执行时间,对超时的任务自动取消。之前一般做法是新启动一个计时器,在计时器的超时回调中执行CancellationTokenSource.Cancel方法。在.Net 4.5中,该操作得到了进一步的简化,我们可以通过在创建CancellationTokenSource时设置超时来实现这一功能。
var cancelTokenSource = new CancellationTokenSource(3000);
除此之外,也可以通过如下代码实现同样的效果。
cancelTokenSource.CancelAfter(3000);
相关文章推荐
- C# 导出word文档及批量导出word文档(4)
- C#Winform控件随窗体缩放
- C# 导出word文档及批量导出word文档(3)
- C#中传值和传地址的思考(二)
- C# 导出word文档及批量导出word文档(2)
- C# 导出word文档及批量导出word文档(1)
- C#WinForm中支持透明的TextBox控件
- C#趣味程序---理财高手
- C# 反射机制(转)
- C#高级编程二十九天----泛型接口
- 【C#】【邮件】C#发送邮件出现 "指定字符串与主题所要求的形式不符"
- c#代码实现百度搜索页面网页遍历
- C#(WPF)程序将Debug中的.exe文件放入注册表中启动,获取错误的当前路径--解决方案
- C#(WPF)程序将Debug中的.exe文件放入注册表中启动,获取错误的当前路径--解决方案
- C#高级编程二十八天----泛型类的功能
- Visual C# 代码段
- C# 调用控制台cmd 实现WIFI 共享
- C# Image 图片的缩放
- C# Controls 添加组件、遍历组件、判断组件名以及为相应组件添加对应函数
- 使用 Override 和 New 关键字进行版本控制(C# 编程指南)