亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

線程池將任務排隊到隊列后,竟丟失了該任務

線程池將任務排隊到隊列后,竟丟失了該任務

HUX布斯 2018-12-06 13:53:45
今天不小心發現一個問題一直不解。 ? ? ? 當我在一個方法中使用ThreadPool.QueueUserWorkItem插入任務時,如果方法執行過快會導致我插入的任務實際上沒有執行。而若我插入任務后讓線程等待一下,那么插入的任務就可以正常執行。。見代碼 static void Main(string[] args) { Example_RegisterWaitForSingleObject(); Console.ReadKey(); } private static void Example_RegisterWaitForSingleObject() { ThreadPool.QueueUserWorkItem(o => { while (true) { Thread.Sleep(500); Console.WriteLine("123"); } }); Thread.Sleep(1000); } ? 所以推斷,將任務插入到線程池中是需要時間的,而若在這段時間中釋放掉某些資源就會導致任務沒有實際插入到隊列中。 我的疑惑是: 1、到底我的推斷整不正確。有沒有更官方的解釋,或則研究過win32的幫解釋下 2、若實際代碼中遇到這種情況大家都有什么好解決的辦法(應該不會去Thread.Sleep()一下哇,最好有無阻塞式的方式)
查看完整描述

8 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

我想問一句,你把你代碼中的 Thread.Sleep 都去掉的話,Console.WriteLine("123"); 就不會執行了嗎?
查看完整回答
反對 回復 2018-12-09
?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

我按你的代碼做了一下測試 private static void Example_RegisterWaitForSingleObject()??????? {??????????? ThreadPool.QueueUserWorkItem(o => { ??????????????? while (true) ??????????????? { ??????????????????? //Thread.Sleep(500); ??????????????????? Console.WriteLine("123"); ??????????????? } ??????????? });??????????? //Thread.Sleep(1000);??????? } 正常輸出,沒有任何問題
查看完整回答
反對 回復 2018-12-09
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

@滴答的雨:? 我在2010中試的正常,沒有下2012
查看完整回答
反對 回復 2018-12-09
?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

@滴答的雨:? 你斷點調試一下,看看是什么原因
查看完整回答
反對 回復 2018-12-09
?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

@滴答的雨:? 我覺得是你電腦反映太慢
查看完整回答
反對 回復 2018-12-09
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

@Rich.T: ……不會啊,我在家筆記本I5+4g內存+獨顯和我在公司core2+2G+獨顯,效果一樣
查看完整回答
反對 回復 2018-12-09
  • 8 回答
  • 0 關注
  • 967 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號