我想知道這是否是在下面的代碼中計算x
的安全方法。LINQ中的C#並行性
public static IEnumerable<Object> Parse(Object obj, ref int x)
{
x += 10;
return new List<Object>();
}
public static void Query(List<Object> obj)
{
int x = 0;
var result = obj
.AsParallel()
.Select(o => Parse(o, ref x))
.Aggregate((a, b) => a.Concat(b));
}
這是我的代碼的縮寫版本。我想x
是某種static counter for all parallel executions of Parse
。我希望這不會讓人困惑。
你確定你確實需要它嗎?你需要什麼?正確同步訪問價值的行爲意味着性能大幅降低,因爲操作無法再完全並行工作。 – Servy
此外,您不應該使用'Aggregate/Concat'將序列序列轉換爲平坦序列。它導致查詢嵌套N層深;它會很快破裂。只要使用'SelectMany',它就是專門設計用來做到這一點的。 – Servy
我真的很需要它,因爲最後我需要檢查所有的Parse方法是否計算了一個確切數量的(非常複雜的)對象。並非常感謝你關於'SelectMany'的提示! –