C# 基本多线程代码未按预期工作
我是多线程新手,我用一个非常简单的代码得到了意想不到的结果:C# 基本多线程代码未按预期工作,c#,multithreading,C#,Multithreading,我是多线程新手,我用一个非常简单的代码得到了意想不到的结果: public void Run() { for (int i = 0; i < 10; i++) { Thread t = new Thread(() => myFun((i + 1))); t.Start(); } } private void myFun(int threadNo)
public void Run()
{
for (int i = 0; i < 10; i++)
{
Thread t = new Thread(() => myFun((i + 1)));
t.Start();
}
}
private void myFun(int threadNo)
{
Console.WriteLine("Thread #" + threadNo.ToString());
}
有人能解释一下为什么上面的代码会打印到控制台窗口吗
线程3
线程3
线程3
螺纹6
螺纹6
线程8
线程9
线程10
线程11
线程11这是因为您使用的是lambda 重新构造代码,如下所示:
public void Run()
{
for (int i = 0; i < 10; i++)
{
int j = i;
Thread t = new Thread(() => myFun((j + 1)));
t.Start();
}
}
private void myFun(int threadNo)
{
Console.WriteLine("Thread #" + threadNo.ToString());
}
享受变化。这是因为您使用的是lambda 重新构造代码,如下所示:
public void Run()
{
for (int i = 0; i < 10; i++)
{
int j = i;
Thread t = new Thread(() => myFun((j + 1)));
t.Start();
}
}
private void myFun(int threadNo)
{
Console.WriteLine("Thread #" + threadNo.ToString());
}
您可以像Jesse建议的那样在循环中使用局部变量,也可以使用参数化的开始:
您可以像Jesse建议的那样在循环中使用局部变量,也可以使用参数化的开始:
显然,我希望线程1线程2。。。3…4…5…6…7…8…9…10显然我希望线程1线程2。。。3...4...5...6...7...8...9...10