今天不小心發現一個問題一直不解。
? ? ? 當我在一個方法中使用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 回答

隔江千里
TA貢獻1906條經驗 獲得超10個贊
我按你的代碼做了一下測試
private static void Example_RegisterWaitForSingleObject()??????? {??????????? ThreadPool.QueueUserWorkItem(o => { ??????????????? while (true) ??????????????? { ??????????????????? //Thread.Sleep(500); ??????????????????? Console.WriteLine("123"); ??????????????? } ??????????? });??????????? //Thread.Sleep(1000);??????? }
正常輸出,沒有任何問題
- 8 回答
- 0 關注
- 967 瀏覽
添加回答
舉報
0/150
提交
取消