C# 多线程用 lambda 传参,遇到的疑问。
代码如下,期待的运行结果是线程 0 ~ 4 随机顺序打印。
void print(int i)
{
Console.WriteLine("Thread {0}.", i.ToString());
}
for (int i = 0; i < 5; i++)
{
Thread thread = new Thread(() => print(i));
thread.Start();
}
实际运行结果:
!!为什么 4 会出现两次,而且为什么会有 5 没有 0 和 1 ??
按我的认知这可能代表着传入的 i 不是当时的 i ,是动态变化的值,但函数传参不应该是传值吗,为什么会这样?
PS:在循环内部设置 int j = i;后传入 j 就可以达成我最开始期望的结果,但还是想知道会这样的根本原因是什么?