Welcome

首页 / 软件开发 / .NET编程技术 / .NET 4并行(多核)编程系列之三 从Task的取消

.NET 4并行(多核)编程系列之三 从Task的取消2012-02-13 博客园 小洋前言:因为Task是.NET 4并行编程最为核心的一个类,也我们在是在并行编程常常打交道的类,所以,对Task对全面的了解很有必要。

上篇文章主要讲述了如何创建一个task,本篇文章主要讲述如何取消一个task。

本篇主的主要议题如下:

1.通过轮询的方式检测Task是否被取消

2.用委托delegate来检测Task是否被取消

3.用Wait Handle还检测Task是否被取消

4.取消多个Task

5.创建组合的取消Task的Token

6.判断一个Task是否已经被取消了

本篇的理论不多,代码的例子很多。

在TPL中一个标准化的操作就是”取消Task”。之所以说它是个标准化的操作,其实是把这个操作和之前传统的多线程编程进行比较而言的。

在之前的多线程编程中,我们一般是自己写一些代码来取消线程的运行。但是在.NET 4的TPL中就内置了取消的方法,可能我们觉得TPL没有必要内置这些代码,因为太简单了。但是这个内置的方法不仅仅只是取消了运行的Task,而且还减小了在取消运行的Task时可能产生的一些风险,我们后续文章会详细讲述。

创建一个取消的Task一般要进行下面一些步骤:

a.a.创建System.Threading.CancellationTokenSource的一个实例:

// create the cancellation token source

CancellationTokenSource tokenSource = new CancellationTokenSource();

b.b.通过CancellationTokenSource.Token属性获得一个System.Threading.CancellationToken:

CancellationToken token = tokenSource.Token;

c.创建一个新的Task或者Task<T>,并且在构造函数传入Action或者Action<object>的委托作为第一个参数,传入CancellationToken作为第二个参数:

Task task = new Task(new Action(printMessage), token);

d.d.调用Task的Start()方法。