私は自分の懸念を説明するためにいくつかのコードを書きました:
static void Main(string[] args)
{
IEnumerable<decimal> marks = GetClassMarks();
IEnumerable<Person> students = GetStudents();
students.AsParallel().ForAll(p => GenerateClassReport(p, marks));
Console.ReadKey();
}
GetClassMarksは、奇妙なデータソースからのyieldreturnを使用します。GenerateClassReportは基本的にmarks.Sum()/ marks.Count()を実行して、クラスの平均を取得するとします。
私が理解していることから、students.AsParallel()。ForAllは並列foreachです。
私の心配は、GetClassMarksメソッド内で何が起こるかということです。
- 一度だけ列挙されるのでしょうか、それとも何度も列挙されるのでしょうか。
- 列挙はどのような順序で行われますか?
- マークに対して.ToList()を実行して、1回だけヒットするようにする必要がありますか?