2011-05-16 74 views
1
static readonly System.Timers.Timer _timer = new System.Timers.Timer(); 

static void Main(string[] args) 
{ 
    _timer.Interval = 1000; 
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed); 
    _timer.Start(); 

    Console.WriteLine("Press any key to exit..."); 
    Console.ReadKey(); 
} 

static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    Console.WriteLine(DateTime.Now); 
    Thread.Sleep(600000); // 10 minutes 
    Console.WriteLine(DateTime.Now); 
} 

如此長時間的睡眠定時器線程會發生什麼?它返回到線程池還是結束了很多睡眠線程?當一個定時器線程進入睡眠狀態時會發生什麼

+0

「?當計時器線程進入睡眠狀態會發生什麼?」 - 你可以停止閱讀「兔子去香蕉!」去吧! ;) – 2011-05-16 04:48:30

回答

3

睡眠線程將返回到線程池,但僅在睡眠結束後。一個線程池有最大數量的線程,這意味着你可以用盡線程,因爲它們都會睡覺。

編輯:

線程池的文檔:

http://msdn.microsoft.com/en-us/library/system.threading.threadpool.getmaxthreads.aspx

+0

但是在'任務管理器'下,這個應用程序的線程數是30,並且不會隨着時間而改變。 – Xaqron 2011-05-16 01:27:17

+0

這是因爲線程池的最大線程數。當所有線程都處於睡眠狀態時,線程的新請求將保持排隊,直到線程池線程可用。查看ThreadPool的文檔。我編輯了包含鏈接的答案。 – 2011-05-16 15:39:51

相關問題