System.Threading.Timer在等待时是否消耗线程?

时间:2013-10-31 23:58:02

标签: c# multithreading

如果我启动System.Threading.Timer,它在等待(坏)时是消耗ThreadPool线程,还是仅在定时器执行TimerCallback时消耗?

2 个答案:

答案 0 :(得分:3)

是。和不。这取决于您的.NET框架版本。传统上不,它消耗了整个线程。由CLR开始处理所有活动计时器。

在最新版本上不是这样,例如我在Windows 8.1上运行的4.5.1。它已切换到使用CreateTimerQueueTimer来完成这项工作。这是由操作系统汇集的。

通过启用非托管调试并在计时器的回调上设置断点来获取洞察力。看看调用堆栈。

答案 1 :(得分:2)

仅在执行回调时。请注意,如果回调的持续时间长于计时器间隔,则多个线程池线程将同时执行回调。