如果我启动System.Threading.Timer,它在等待(坏)时是消耗ThreadPool线程,还是仅在定时器执行TimerCallback时消耗?
答案 0 :(得分:3)
是。和不。这取决于您的.NET框架版本。传统上不,它消耗了整个线程。由CLR开始处理所有活动计时器。
在最新版本上不是这样,例如我在Windows 8.1上运行的4.5.1。它已切换到使用CreateTimerQueueTimer来完成这项工作。这是由操作系统汇集的。
通过启用非托管调试并在计时器的回调上设置断点来获取洞察力。看看调用堆栈。
答案 1 :(得分:2)
仅在执行回调时。请注意,如果回调的持续时间长于计时器间隔,则多个线程池线程将同时执行回调。