就在最近我在面试时遇到了这样一个问题
方法“计算”执行的输出是什么:
public void Calculate()
{
var threads = Enumerable.Range(0, 50).Select(x =>
{
var thread = new Thread(DoWork)
{
Name = x.ToString()
};
return thread;
});
foreach (var thread in threads)
{
thread.Start();
}
foreach (var thread in threads)
{
thread.Join();
}
}
private void DoWork()
{
Console.WriteLine("Start()");
}
我在 VS 中检查了它,并惊讶地发现 ThreadStateException 在“thread.Join();”行上被抛出。使用调试器我发现线程没有启动。似乎当我们通过第二个 foreach 时,我们处理了另一个线程集合。谁能详细解释为什么抛出异常?
提前致谢!