【问题标题】:Explain please AsParallel()请解释一下 AsParallel()
【发布时间】:2011-05-04 15:45:47
【问题描述】:
谁能解释我一件事。据我了解 AsParallel() 在自己的任务中执行。那么,如果查询返回大量数据,那么当 'foreach' 开始执行 Console.WriteLine 时,变量 'd' 可能为空?
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);
}
【问题讨论】:
标签:
c#
ienumerable
parallel-processing
plinq
【解决方案1】:
AsParallel 是 PLINQ 功能。
PLINQ 自动并行化本地 LINQ 查询。 PLINQ 具有易于使用的优点,因为它将工作分区和结果整理的负担都交给了框架。
要使用PLINQ,只需在输入序列上调用AsParallel(),然后像往常一样继续LINQ查询。
变量d 在您的情况下只能不为空,因为PLINQ。如果它为空,则表示集合中没有满足条件x <= 25的元素。
您可以阅读更多here
【解决方案2】:
没有。添加 .AsParallel() 后,PLINQ 将使用经典的数据并行评估技术在所有可用处理器上透明地执行 Where、OrderBy 和 Select。实际上查询根本不会执行,直到您在 foreach 循环中“触摸”它(PLINQ 使用延迟执行就像 LINQ)。主线程将像往常一样暂停执行,直到从查询执行返回。
Additional info here..