我有下面的代碼產生不一致的輸出。不一致的線程
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