foreach
l oop запускает task
завершает итерацию, запускает еще один task
в следующей итерации и так далее. fareach
завершает все итерации и устанавливает значение index
равным 5
даже до запуска 1-й задачи. Вот почему вы найдете значение index
как 5
для всех задач. Теперь, если вы добавите Wait
каждую задачу для завершения, тогда значения index
и innerIndex
будут совпадать. Но вы потеряете преимущество параллельного выполнения этой задачи.
Измените код следующим образом:
foreach (int num in arr00)
{
var innerIndex = index;
Task.Run(async () =>
{
Console.WriteLine($"{index}, {innerIndex}: {num}");
tasks++;
}).Wait(); //Wait for task to complete
index++;
}
Вывод:
0, 0: 100
1, 1: 0
2, 2: 3
3, 3: 8
4, 4: 21