Task.Delay 使用注意事項


注意:下邊代碼會一直運行,不會返回

        [TestMethod]
        public void MaxThreadCntTest()
        {
            ThreadPool.SetMaxThreads(20, 20);
            List<Task> tasks = new List<Task>();
            for (var c = 0; c < 20; c++) {
                tasks.Add(Task.Run(() =>
                {
                    Task.Delay(5000).Wait();    //Task.Delay 也會使用線程池,線程池滿的時候,會導致它無法結束
                }));
            }
            Task.WaitAll(tasks.ToArray());
        }


把線程池最大數量設置成20個線程,然后開20個線程,在這20個線程里 Task.Delay 就會一直卡在那兒,分析原因,應該是 Task.Delay 也使用了線程池,在線程池滿的情況下,它無法獲取到新線程來結束Wait().


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM