我正在尝试任务。为什么输出10而不是循环的每个值?
public static void StartTasks()
{
Task[] tasks = new Task[10];
for (int i = 0; i < 10; i++)
tasks[i] = new Task(() => Console.WriteLine(i));
foreach (Task task in tasks)
{
task.Start();
}
}
答案 0 :(得分:17)
C#lambdas捕获对变量的引用,而不是变量的值。
如果要捕获该值,则需要首先在循环内复制它,这会导致捕获获取对本地范围的不变变量的引用。
public static void StartTasks()
{
Task[] tasks = new Task[10];
for (int i = 0; i < 10; i++) {
int j = i;
tasks[i] = new Task(() => Console.WriteLine(j));
}
foreach (Task task in tasks)
{
task.Start();
}
}
答案 1 :(得分:4)
除了接受的答案,您还可以将参数传递给任务。例如,
Host