Будет ли оно перечисляться один или несколько раз?
Если предположить, что GenerateClassReport()
перечисляет marks
один раз, то marks
будет перечисляться один раз для каждого элемента в students
.
В каком порядке будет происходить перечисление?
Каждый поток будет перечислять коллекцию в порядке по умолчанию, но несколько потоков будут делать это одновременно.Порядок одновременного перечисления обычно непредсказуем.Кроме того, вы должны отметить, что количество потоков ограничено и изменчиво, поэтому, скорее всего, не все перечисления будут происходить одновременно.
Нужно ли делать .ToList () для отметок, чтобы сделатьВы уверены, что он ударил только один раз?
Если GetClassMarks()
является итератором (т. е. он использует конструкцию yield
), то его выполнение будет отложено и будет вызываться один раз каждый раз marks
перечисляется (т.е. один раз для каждого элемента в students
).Если вы используете IEnumerable<decimal> marks = GetClassMarks().ToList()
или если GetClassMarks()
внутренне возвращает конкретный список или массив, то GetClassMarks()
будет выполнено немедленно, а результаты будут сохранены и перечислены в каждом из параллельных потоков без повторного вызова GetClassMarks()
.