.Net4.0 Parallel编程(三)Data Parallelism下
在上篇文章中介绍了如何Break、Stop循环,以及如何定义线程局部变量。在本文中介绍如何在外部去取消循环、以及异常的处理。
Cancel
在并行的循环中支持通过传递ParallelOptions参数中的aspx">CancellationToken进行取消循环的控制,我们可以CancellationTokenSource实例化之后传递给ParallelOptions对象Cancellation值。下面来看个示例:
02 |
public void CancelLoop() |
04 |
var sourceNums = Enumerable.Range(0, 1000000000); |
05 |
var cts = new CancellationTokenSource(); |
06 |
var po = new ParallelOptions(); |
07 |
var stack = new ConcurrentStack< int >(); |
08 |
po.CancellationToken = cts.Token; |
09 |
po.MaxDegreeOfParallelism = System.Environment.ProcessorCount; |
10 |
Task.Factory.StartNew(() => |
12 |
foreach (var num in sourceNums) |
21 |
Parallel.ForEach(sourceNums,po, num => |
24 |
po.CancellationToken.ThrowIfCancellationRequested(); |