技术开发 频道

.NET 4.0 Beta 1将为PLINQ带来些什么?

  ·包含编入索引的Select,编入索引的Where,编入索引的SelectMany或者位置不在原始顺序上的ElementAt的查询。索引排序容易受到改变排序规则(如OrderBy)运算符和删除元素(如Where)运算符的影响。

  ·在已经偏离原始顺序的情况下(参看上面的条目),包含Take、TakeWhile、Skip、SkipWhile运算符的查询,。

  ·包含Zip、SequenceEquals的查询,除非其中一个数据源具有初始排序的索引,并且其他数据源是可索引的(比如一个数组或IList<T>)。

 ·包含Concat的查询,除非它是应用到可索引的数据源上。

 ·包含Reverse的查询,除非应用到可索引的数据源上。

  为了强制并行执行,可以这样做:
e.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism)

  取消操作。并行运算可以如下面例子所示那样被取消: 

var cts = new CancellationTokenSource();
var q
= a.AsParallel().WithCancellation(cts.Token).Where(x=>Filter(x)).Select(x=>DoWork(x);
-- separate thread --
foreach (var e in q) { … }  // Statement 1
-- separate thread --
var l
= q.ToList(); // Statement 2
-- separate thread --
cts.Cancel();
// this will attempt to cancel any in-flight queries,
// including both statements 1 and 2

  自定义分区。Partitioner<TSource>、OrderablePartitioner<TSource>类和Partitioner工厂类提供了对数据如何分区的控制。
 
  部分代码的重构。IParallelEnumerable、IParallelEnumerable<T>和IParallelOrderedEnumerable<T> 接口不再是接口而变为不可被扩展的抽象类了:ParalellQuery、ParalellQuery<TSource>和OrderedParallelQuery<TSource>。原因是,一开始他们就不会被扩展。
 
  合并选项。“从AsMerged中移出了ParallelMergeOptions的处理。合并缓冲区现在通过WithMergeOptions方法来设定。”
 
AsMerged。AsMerged又重命名为曾经使用的和AsParallel类似的名称——AsSequential。

0
相关文章