Task показывает одинаковую итерацию в цикле - C#
Формулировка задачи:
Добрый вечер, пытаюсь с помощью Task создать несколько процессов и запустить функцию в каждом из них, но всегда получается одинаковая итерация. Вот пример кода:
На экране не выводится 7 различных цифр в какой-либо последовательности, при последней компиляции вывелась одна четверка и все остальные семерки. Объясните кто-нибудь в чем проблема и как это обойти? Я пробовал в цикле ожидать завершении каждого процесса (пример: task.Wait()), но тогда уже ведь задача не является параллельной.
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); } });
Решил проблему следующим образом:
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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д