Task.Factory.Startnew и непонятная работа цикла - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Задание лабораторной такое - использовать класс Task, реализовать вычисление интеграла параллельно. Количество потоков зависит от количества процессоров. Собственно вот код
Листинг программы
  1. TaskCreationOptions atp = TaskCreationOptions.AttachedToParent;
  2. Task.Factory.StartNew(() =>
  3. {
  4. for (int d = 0; d < Environment.ProcessorCount; d++)
  5. {
  6. Task.Factory.StartNew(() => function(lst[d]), atp);
  7. }
  8. }
  9. ).ContinueWith(p => { Console.WriteLine("Интеграл равен: {0}", result); });
Вопрос в следующем: на моей машине Environment.ProcessorCount = 4, по идее, счетчик d не должен выполнять тело цикла при 4, но он усердно это делает, и поэтому при обращении к lst[d] получаю "индекс вне границ". Почему так происходит? (lst - список, lst.Length=Environment.ProcessorCount) Спасибо

Решение задачи: «Task.Factory.Startnew и непонятная работа цикла»

textual
Листинг программы
  1. for (int d = 0; d < Environment.ProcessorCount; d++)
  2. {
  3.     int temp = d;
  4.     Task.Factory.StartNew(() => function(lst[temp]), atp);
  5. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут