Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么这两段代码返回不同的结果(任务)_C#_Multithreading_Task - Fatal编程技术网

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传递给方法吗?