我遇到了这个示例,该示例演示了Captured Variables
within aThread
和 a loop 的情况:
代码 1
for (int i = 0; i < 10; i++)
{
new Thread(() => Console.Write(i)).Start();
}
结果 1
0223558779
据说建议的解决方案是创建一个临时变量,如下所示:
代码 2
for (int j = 0; j < 10; j++)
{
int temp = j;
new Thread(() => Console.Write(temp)).Start();
}
结果 2
0124356879
似乎该解决方案仅通过使用将创建 10 个不同内存位置的变量来消除冗余,但序列仍然没有排序,我理解原因,这与在迭代和启动之前temp
线程执行速度不快有关Console.Write(temp)
未来的线程,我试图通过睡眠主线程来减慢循环,让每个线程有时间通过执行以下操作正确写入:
代码 3
for (int i = 0; i < 10; i++)
{
new Thread(() => Console.Write(i)).Start();
Thread.Sleep(10);
}
它解决了这个问题,但是当涉及到实际场景时,我不认为这是一个真正的解决方案,我在这里是否缺少一个技巧或练习来显示一个完整的正确序列,例如0123456789
?