for (int i = 1; i < 100; i++)??????????? {??????????????? ThreadPool.QueueUserWorkItem((o) =>??????????????? {??????????????????? int z = i;??????????????????? Thread.Sleep(1000);??????????????????? Console.Write(z.ToString()); ??????????????????? Console.Write(Environment.NewLine); ??????????????? });??????????? }
為啥輸出的都是100呢,,不是用z保存了變量了嗎
9 回答

隔江千里
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
for (int i = 1; i < 100; i++)??????????? {??????????????? ThreadPool.QueueUserWorkItem((o) =>??????????????? {??????????????????? int z = (int)o;??????????????????? Thread.Sleep(1000);??????????????????? Console.Write(z.ToString());???????????????????? Console.Write(Environment.NewLine);???????????????? },i);??????????? }

海綿寶寶撒
TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
老兄位置放錯(cuò)啦!~
?看我這個(gè)吧:
for (int i = 1; i < 100; i++)
{
ThreadPool.QueueUserWorkItem(start =>
{
int z = i;
Console.WriteLine(z.ToString());
});
Thread.Sleep(1);//在循環(huán)中需要調(diào)用一下,由于被置于ThreadPool中的操作是異步,所以還沒有來的執(zhí)行,z就被for循環(huán)改變,永遠(yuǎn)是100
}

慕碼人2483693
TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
@彬彬@科比: 其實(shí)他回答得不是z是否是值類型,而是在第一次執(zhí)行int z = i;這句的時(shí)候,i已經(jīng)是100了。

一只名叫tom的貓
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
@滴答的雨:?for循環(huán)不就是添加99個(gè)操作到線程池中嘛。。怎么會(huì)i已經(jīng)是100呢?。??

墨色風(fēng)雨
TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
@滴答的雨:?這段代碼的執(zhí)行順序到底是怎樣的??線程次里面什么時(shí)候才執(zhí)行

UYOU
TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
還沒有來得及執(zhí)行是什么意思??難道會(huì)等for循環(huán)執(zhí)行后才執(zhí)行???

富國滬深
TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
你的問題可能也已經(jīng)解決了,但是這個(gè)問題你為什么沒排查出來錯(cuò)誤?按說應(yīng)該可以的,你應(yīng)該沒有斷點(diǎn)調(diào)試吧。有時(shí)候斷點(diǎn)很方便的

汪汪一只貓
TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
i是公共的變量。你所有的100個(gè)后臺(tái)的線程都是有了它,這個(gè)情況下你輸出的時(shí)候,主線程for循環(huán)已經(jīng)走完,此時(shí)i是100,你說不是100,難道是1 , 2, 3。。。。。 什么的?
如果要輸入1,2,3.....
for (int i = 1; i < 100; i++)??????????? {
int z = i;??????????????? ThreadPool.QueueUserWorkItem((o) =>??????????????? {??????????????????? Thread.Sleep(1000);??????????????????? Console.Write(z.ToString());???????????????????? Console.Write(Environment.NewLine);???????????????? });??????????? }
- 9 回答
- 0 關(guān)注
- 393 瀏覽
添加回答
舉報(bào)
0/150
提交
取消