1

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

4

2 回答 2

3

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

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

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

于 2013-11-01T00:29:41.883 回答
2

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

于 2013-11-01T00:09:01.217 回答