从this发帖后,我被告知下面的代码部分遭受了“关闭循环变量的令人震惊的行为。”
foreach (Canidate canidate in allCanidates)
{
Thread newThread = new Thread(delegate()
{
BusyWait(canidate);
});
newThread.Start();
}
我把它改为:
foreach (Canidate canidate in allCanidates)
{
var can = canidate;
Thread newThread = new Thread(delegate()
{
BusyWait(can);
});
newThread.Start();
}
但我的老板一直坚持认为它会遭遇同样的问题。我使用this链接尝试解决此问题。有人可以帮我正确解决问题,以便我的代码能够正确执行。这个问题对我来说都是新的,我不确定我是否完全理解它。
答案 0 :(得分:4)
关闭后来更改值的变量是导致问题的原因。
candidate
更改了循环周围的每一圈“ 会导致问题。can
是围绕循环每次“圈”创建的,永远不会更改,不会导致问题。