主要介绍CancellationToken的多种应用。
1,ThreadPool直接启动线程,传递CancellationToken。
2,Task启动线程,传递CancellationToken。Task传递方式分为两种,一种通过Task的参数进行传递,另一种通过向线程内传递对象的方式传递CancellationToken。
3,CancellationToken的回调函数应用。
话不多说,请看代码。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("当前线程{0},当前状态{1}", Thread.CurrentThread.GetHashCode(), Thread.CurrentThread.ThreadState);
//使用线程池创建线程,然后取消线程
CancelWithThreadPoolMiniSnippet();
}
static CancellationTokenSource cts = new CancellationTokenSource();
static CancellationToken token = cts.Token;
static void CancelWithThreadPoolMiniSnippet()
{
Console.WriteLine("当前线程{0},当前状态{1}", Thread.CurrentThread.GetHashCode(), Thread.CurrentThread.ThreadState);
#region 使用QueueUserWorkItem的构造函数,传递cts.Token,但我不喜欢这个模式 跟踪不了状态
//ThreadPool.QueueUserWorkItem(new WaitCallback(DoSomeWork), ctn);
#endregion
#region 使用传递参数的模式 传递CancellationToken,这里的cts.Token是作为Action的参数传递的
//var action = new Action
代码内执行结果如下,该结果为CancellationToken的回调函数应用:
到此NET framework4.0里的线程安全就都讲完了,虽然历时好多好多年。。。。。。。 也可能是最近写文字的能力有所提升,不然这线程安全的文章可能还要拖。。。。。。。。
后记
在NET framework4.6里,微软提供了async和await语法,也是有关线程安全,我将会在新的语法相关文章里讲解async和await的用法。



