Что происходит, когда поток таймера переходит в режим сна - PullRequest
1 голос
/ 16 мая 2011
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);
}

Что происходит с потоком таймера при таком долгом сне?Возвращается ли он к пулу потоков, или мы получаем много спящих потоков?

1 Ответ

3 голосов
/ 16 мая 2011

Спящие потоки вернутся в пул потоков, но только после окончания сна . В пуле потоков есть максимальное количество потоков, это означает, что у вас может закончиться использование потоков, потому что все они будут в спящем режиме.

EDIT:

ThreadPool docs:

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

...