我有以下代码:懒惰评价并行查询
static IEnumerable<int> foo()
{
int den = 0;
yield return 10;
yield return 10;
yield return 10;
yield return 10/den;
yield return 10/den;
}
static public void Main()
{
foreach (var item in foo().AsParallel().Take(3))
{
Console.WriteLine(item);
}
Console.ReadLine();
}
此代码失败(因为采集的实际未使用的元素将被计算 - 计算PLINQ数据块)。 .Net是否支持真正的“懒惰”并行(没有使用未使用元素的块的预计算)?
注意:这只是一个简单的例子。据我所知,AsParallel
应该用于大数据以避免开销。
我错过了什么吗?你只需要改变顺序吧? 'foo()。拿(3).AsParallel()' – wdosanjos
有什么区别? – LmTinyToon
'AsParallel()'不知道后面会发生什么,所以它并行化了集合中的所有项目,从而导致了错误。 '采取(3).AsParallel()'采取前3个元素然后并行化他们,因此没有错误。 – wdosanjos