C# 为什么这两段代码返回不同的结果(任务)
我尝试使用任务进行多线程处理,这里是我遇到的奇怪之处:C# 为什么这两段代码返回不同的结果(任务),c#,multithreading,task,C#,Multithreading,Task,我尝试使用任务进行多线程处理,这里是我遇到的奇怪之处: tasks[0] = Task.Run(() => SumNumbers(0, end)); tasks[1] = Task.Run(() => SumNumbers(1, end)); for (int i = 0; i <= 1; i++) { tasks[i] = Task.Run(() => SumNumbers(i, end)); } tasks[0]=Task.Run(()=>SumNumbe
tasks[0] = Task.Run(() => SumNumbers(0, end));
tasks[1] = Task.Run(() => SumNumbers(1, end));
for (int i = 0; i <= 1; i++)
{
tasks[i] = Task.Run(() => SumNumbers(i, end));
}
tasks[0]=Task.Run(()=>SumNumbers(0,end));
tasks[1]=Task.Run(()=>SumNumbers(1,end));
对于(int i=0;i sum数字(i,end));
}
前两行返回正确的结果,而带有循环的解决方案则不返回正确的结果。有什么解释吗?因为您的任务在另一个线程中启动,而当前线程希望等待并增加计数器,因为您创建的代理使用原始计数器,因为计数比创建新任务快得多
这个问题问得不恰当,但我怀疑您需要将I赋给一个临时变量,然后在SumNumber函数中使用它,否则它将使用I=2两次,这是一个闭包问题。传递给两者的
i
将相同,因此更新为2。你需要先把它赋给一个局部变量,然后使用它。谢谢你的回答,这解决了它,但我仍然不明白为什么会发生这种情况。第一次迭代时不应该将i=0传递给方法,第二次迭代时不应该将i=1传递给方法吗?