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

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

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

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

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

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

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


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

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

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