我有以下代碼:懶惰評價並行查詢
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