Я просто пытаюсь изучить различные способы выполнения потоков / задач, и мне нужен был способ динамического изменения выполняемых задач, и я указал на цикл Parallel.ForEach.Я сделал небольшой пример программы и у меня есть несколько вопросов.
public void StartTest()
{
List<Action> actions = new List<Action>();
for (int i = 0; i < 6; i++)
{
actions.Add(() => Function1("Word: " + i));
}
Parallel.ForEach(actions, new ParallelOptions
{
MaxDegreeOfParallelism = 2
}, action => action());
Console.WriteLine("Finished. \nTime Taken: " + total.ToString(@"dd\.hh\:mm\:ss"));
Console.Read();
}
private void Function1(string word)
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine(word + " | Task Id: " + Task.CurrentId + " | " + i);
}
Console.WriteLine(word + " ----- Completed.");
}
Итак, мой первый вопрос: что делает фрагмент цикла action => action ()?Я понимаю, что такое лямбды, но я действительно не следую этому
Мой второй вопрос: почему это результат?
Слово: 6 |Task Id: 3 |0
Слово: 6 |Task Id: 3 |1
Слово: 6 |Task Id: 3 |2
Слово: 6 |Task Id: 3 |3
Слово: 6 |Task Id: 3 |4
Слово: 6 ----- Завершено.
Слово: 6 |Task Id: 3 |0
Слово: 6 |Task Id: 3 |1
Слово: 6 |Task Id: 3 |2
Слово: 6 |Task Id: 3 |3
Слово: 6 |Task Id: 3 |4
Слово: 6 ----- Завершено.
Слово: 6 |Task Id: 3 |0
Слово: 6 |Task Id: 3 |1
Слово: 6 |Task Id: 3 |2
Слово: 6 |Task Id: 3 |3
Слово: 6 |Task Id: 3 |4
Слово: 6 ----- Завершено.
Слово: 6 |Task Id: 3 |0
Слово: 6 |Task Id: 3 |1
Слово: 6 |Task Id: 3 |2
Слово: 6 |Task Id: 3 |3
Слово: 6 |Task Id: 3 |4
Слово: 6 ----- Завершено.
Слово: 6 |Task Id: 3 |0
Слово: 6 |Task Id: 3 |1
Слово: 6 |Task Id: 3 |2
Слово: 6 |Task Id: 2 |0
Слово: 6 |Task Id: 2 |1
Слово: 6 |Task Id: 2 |2
Слово: 6 |Task Id: 2 |3
Слово: 6 |Task Id: 2 |4
Слово: 6 ----- Завершено.
Слово: 6 |Task Id: 3 |3
Слово: 6 |Task Id: 3 |4
Слово: 6 ----- Завершено.
Завершено.
Время выполнения: 00.00: 00: 00
Почему каждый номер6?Я понимаю, как работает многопоточность, но не передача / ссылка на параметры.
Итак, это мои два вопроса.Любая помощь будет фантастической.Я некоторое время искал в Google и не смог найти никакой документации, которая имела бы для меня смысл.