【发布时间】:2020-08-14 16:39:29
【问题描述】:
这是一个棘手的问题(可能不适合专家)。我正在学习 C# 中的并发性,并且正在使用一些虚拟代码来测试线程的基础知识。我很惊讶以下代码有时会打印出 10 的值。
Thread[] pool = new Thread[10];
for(int i = 0; i < 10; i++)
{
pool[i] = new Thread(() => Console.Write(i));
pool[i].Start();
}
典型的输出类似于76881079777。我知道值是 10 而不是 1 和 0,因为 for 循环体执行了 10 次(不确定,但我无法破坏 C#)。我更惊讶为什么这不会在语句pool[i] = new Thread(() => Console.Write(i)); 中抛出IndexOutOfRange 异常
据我所知,for 循环的执行方式如下:
- 检查条件(
i < 10) - 如果条件为真则执行主体
- 增加控制变量 (
i++) - 重复
因此,假设我无法理解如何以 10 的值执行主体。有什么想法吗?
【问题讨论】:
标签: c# .net multithreading thread-safety