Task показывает одинаковую итерацию в цикле - C#

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

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

Добрый вечер, пытаюсь с помощью Task создать несколько процессов и запустить функцию в каждом из них, но всегда получается одинаковая итерация. Вот пример кода:
                var Task_1 = Task.Factory.StartNew(() =>
                 {
                     for (var i = 0; i < 7; i++)
                     {
                         Task.Factory.StartNew(() =>
                         {
                             Console.WriteLine(i);
 
                             //Task.Factory.StartNew(matrix.Multiplication, i, TaskCreationOptions.AttachedToParent);
 
                         }, TaskCreationOptions.AttachedToParent);
 
                     }
                 });
На экране не выводится 7 различных цифр в какой-либо последовательности, при последней компиляции вывелась одна четверка и все остальные семерки. Объясните кто-нибудь в чем проблема и как это обойти? Я пробовал в цикле ожидать завершении каждого процесса (пример: task.Wait()), но тогда уже ведь задача не является параллельной.
Решил проблему следующим образом:
               var Task_1 = Task.Factory.StartNew(() =>
             {
 
                     Task.Factory.StartNew(() =>
                     {
 
                         for (int j = 0; j <= Environment.ProcessorCount - 1; j++)
                         {
 
                             Console.WriteLine(j);
                             //Task.Factory.StartNew(matrix.Multiplication, j, TaskCreationOptions.AttachedToParent);
 
                         }

                     }, TaskCreationOptions.AttachedToParent);

             });

            Task.WaitAll(Task_1);

Решение задачи: «Task показывает одинаковую итерацию в цикле»

textual
Листинг программы
for (int j = 0; j <= Environment.ProcessorCount - 1; j++)
                         {
                             int temp = j;
                             Console.WriteLine(temp);
                             //Task.Factory.StartNew(matrix.Multiplication, j, TaskCreationOptions.AttachedToParent);
 
                         }

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


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

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

8   голосов , оценка 3.75 из 5