在C#中关闭循环变量

从这篇文章中,我被告知下面的代码部分遭受了“关闭循环变量的令人震惊的行为”。

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(); } 

但是我的老板一直坚称它会遭遇同样的问题。 我使用此链接尝试解决此问题。 有人可以帮我正确解决问题,以便我的代码能够正确执行。 这个问题对我来说都是新的,我不确定我是否完全理解它。

关闭后来更改值的变量是导致问题的原因。

  • candidate改变循环周围的每个“圈” 并将导致问题。
  • can是围绕循环每次“圈”创建的,永远不会改变, 也不会造成问题。