【发布时间】:2013-07-13 17:39:32
【问题描述】:
我有以下代码创建 10 个线程,这些线程依次将消息写入控制台:
for (int i = 0; i < 10; i++)
{
{
Thread thread = new Thread((threadNumber) =>
{
for (int j = 0; j < 10; j++)
{
Thread.Sleep(200);
Console.WriteLine(string.Format("Thread: {0}, Line: {1}", threadNumber, j));
}
});
thread.Start(i);
}
}
我的理解是ParameterizedThreadStart 接受一个对象,该对象的引用副本被发送到线程。如果是这种情况,因为我没有在每个循环中制作i 的本地副本,所有新线程都将指向相同的内存位置,这意味着某些线程号可能会“丢失”。虽然运行了这个(甚至针对更多的线程/睡眠时间)i 的每个值都有自己的线程。谁能解释一下为什么?
【问题讨论】:
标签: c# multithreading captured-variable