2011-05-04 184 views
9

有人可以解释我一件事。据我所知AsParallel()在自己的任务中执行。因此,如果查询返回大量数据,那么当'foreach'开始执行Console.WriteLine时,变量'd'可以为空。请解释AsParallel()

var integerList = Enumerable.Range(1, 100); 
var d = from x in integerList.AsParallel() 
where x <= 25 
select x; 
foreach (var v in d) 
{ 
Console.WriteLine(v); 
} 

回答

3

AsParallelPLINQ功能。 PLINQ自动并行化本地LINQ查询。 PLINQ具有易于使用的优点,因为它将工作分区和结果归类的负担转移到框架上。

要使用PLINQ,只需在输入序列上调用AsParallel(),然后照常继续LINQ查询。

变量d你的情况可以不是只能是空的,因为PLINQ。如果它将为空,则表示该集合中没有满足条件x <= 25的元素。

你可以阅读更多here

1

.AsParallel()号一旦添加,PLINQ将透明地执行其中,排序依据,并选择全部采用经典的数据并行评价技术可用的处理器。实际上,只有在foreach循环中触摸它时,才会执行查询(PLINQ像LINQ一样使用缓存执行)。主线程将停止执行,直到像往常一样从查询执行返回。

Additional info here..