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);
}