我有下面的代码产生不一致的输出。不一致的线程
string text = "t1";
new Thread (() => Console.WriteLine (text)).Start();
//Thread.Sleep(1);
text = "t2";
new Thread (() => Console.WriteLine (text)).Start();
有时会产生t1和t2,有时会产生双t2。 我现在在想什么呢。当它的输出是double t2时,第一个线程的捕获变量值是t2,因为它是在最后一次变量赋值之后开始的。我对吗?
注意:我在慢速机器上运行此代码。
是的,你说得对 – MarcinJuraszek 2013-02-28 16:14:40
这就是为什么ReSharper的抱怨修改“倒闭潮”的时候。如果在单独线程中启动lambda之后更改该变量,则始终创建传递给lambda的参数的副本,以解决此问题。 – 2013-02-28 16:17:49
我已经添加了单线程代码来演示@MatthewWatson提到的问题作为参考的答案。 – 2013-02-28 16:41:51