协作式取消 CancellationTokenSource
2017-06-21 20:39
411 查看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace TaskApp
{
class Program
{
static void Main(string[] args)
{
//CancellationTokenSource:IDispose
using (CancellationTokenSource cts = new CancellationTokenSource())
{
ThreadPool.QueueUserWorkItem(o => Caculate(cts.Token, 60));
Console.ReadKey();
//lanch cancel method
cts.Cancel();
Console.ReadKey();
}
}
/// <summary>
/// Caculate
/// </summary>
/// <param name="ct">CancellationToken</param>
/// <param name="maxNumber"></param>
private static void Caculate(CancellationToken ct,int maxNumber)
{
int sum = 0;
for (int i = 0; i < maxNumber; i++)
{
if (!ct.IsCancellationRequested)
{
Thread.Sleep(1000);
sum += i;
}
else
{
Console.WriteLine("Caculate is cancelled:sum={0}", sum);
return;
}
}
Console.WriteLine("Caculate Finished:{0}!",sum);
}
}
}
CancellationToken 中肯定存在一种传入方法后能实时刷新的机制,CancellationTokenSource 的实例调用 Cancel方法后 ,Caculate 方法能感知到这种变化。
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace TaskApp
{
class Program
{
static void Main(string[] args)
{
//CancellationTokenSource:IDispose
using (CancellationTokenSource cts = new CancellationTokenSource())
{
ThreadPool.QueueUserWorkItem(o => Caculate(cts.Token, 60));
Console.ReadKey();
//lanch cancel method
cts.Cancel();
Console.ReadKey();
}
}
/// <summary>
/// Caculate
/// </summary>
/// <param name="ct">CancellationToken</param>
/// <param name="maxNumber"></param>
private static void Caculate(CancellationToken ct,int maxNumber)
{
int sum = 0;
for (int i = 0; i < maxNumber; i++)
{
if (!ct.IsCancellationRequested)
{
Thread.Sleep(1000);
sum += i;
}
else
{
Console.WriteLine("Caculate is cancelled:sum={0}", sum);
return;
}
}
Console.WriteLine("Caculate Finished:{0}!",sum);
}
}
}
CancellationToken 中肯定存在一种传入方法后能实时刷新的机制,CancellationTokenSource 的实例调用 Cancel方法后 ,Caculate 方法能感知到这种变化。
相关文章推荐
- C# CancellationTokenSource 终止线程 CancellationTokenSource实现对超时任务的取消
- .Net 4.5中通过CancellationTokenSource实现对超时任务的取消
- 【C#】46. 使用CancellationTokenSource 取消 Task
- .Net 4.5中通过CancellationTokenSource实现对超时任务的取消
- C# 中通过CancellationTokenSource实现对超时任务的取消
- C# 中通过CancellationTokenSource实现对超时任务的取消
- .Net 4.5中通过CancellationTokenSource实现对超时任务的取消
- 第七节:利用CancellationTokenSource实现任务取消和利用CancellationToken类检测取消异常。
- C#5.0 采用CancellationTokenSource方式取消Task
- 使用CancellationTokenSource来取消Task
- 线程阶段性总结——APM,ThreadPool,Task,TaskScheduler ,CancellationTokenSource
- 关于使用CancellationTokenSource控制子线程结果显示在主线程
- C# CancellationTokenSource和CancellationToken的实现
- C# CancellationTokenSource和CancellationToken的实现
- 异步与并行~CancellationTokenSource对线程的作用
- Parallel Programming-使用CancellationTokenSource调度并行运行的Task
- 使用Visual Studio进行单元测试-Shim类中无法找到参数包含CancellationTokenSource的方法
- [转]C# CancellationTokenSource 终止线程
- 线程阶段性总结——APM,ThreadPool,Task,TaskScheduler ,CancellationTokenSource