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