9

有人可以向我解释一件事。据我了解 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);
}
4

2 回答 2

3

AsParallel是一个PLINQ特点。 PLINQ自动并行化本地LINQ查询。PLINQ具有易于使用的优点,因为它将工作分区和结果整理的负担都交给了框架。

要使用PLINQ,只需调用AsParallel()输入序列,然后LINQ像往常一样继续查询。

d在您的情况下,变量不能为空,因为PLINQ. 如果它为空,则表示集合中没有满足条件的元素x <= 25

你可以在这里阅读更多

于 2011-05-04T17:17:15.743 回答
1

不会。添加 .AsParallel() 后,PLINQ 将使用经典的数据并行评估技术在所有可用处理器上透明地执行 Where、OrderBy 和 Select。实际上查询根本不会执行,直到您在 foreach 循环中“触摸”它(PLINQ 使用延迟执行就像 LINQ)。主线程将停止执行,直到像往常一样从查询执行返回。

附加信息在这里..

于 2011-05-04T17:21:41.090 回答