有人可以解释一件事。据我所知,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);
}
答案 0 :(得分:3)
AsParallel
是PLINQ
功能。
PLINQ
自动并行化本地LINQ
个查询。 PLINQ
具有易于使用的优点,因为它可以减轻工作分区和结果整理到框架的负担。
要使用PLINQ
,只需在输入序列上调用AsParallel()
,然后照常继续LINQ
查询。
变量d
不只能因为PLINQ
而为空。如果它为空,则表示集合中没有满足条件x <= 25
的元素。
您可以阅读更多here
答案 1 :(得分:1)
没有。一旦添加了.AsParallel(),PLINQ将使用经典数据并行评估技术透明地在所有可用处理器上执行Where,OrderBy和Select。实际上,在foreach循环中触摸它之前根本不执行查询(PLINQ使用与LINQ一样的默认执行)。主线程将暂停执行,直到从常规查询执行返回。