注意:下邊代碼會一直運行,不會返回
[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().
