Это очень простой пример:
int numLanes = 8;
var tasks = new List<Task>();
for (var i = 0; i < numLanes; ++i)
{
var t = new Task(() =>
{
Console.WriteLine($"Lane {i}");
});
tasks.Add(t);
}
tasks.ForEach((t) => t.Start());
Task.WaitAll(tasks.ToArray());
Производит:
Lane 8
Lane 8
Lane 8
Lane 8
Lane 8
Lane 8
Lane 8
Lane 8
Что не соответствует ожиданиям, параметр i
не передан правильно. Я думал использовать Action<int>
, чтобы обернуть код, но не мог понять, как я это сделаю. Я не хочу писать специальный метод, такой как Task CreateTask(int i)
. Мне интересно, как это сделать, используя лямбды.
Какой нормальный способ сделать это - раскручивать один и тот же код несколько раз параллельно с другое значение параметра?