1

Hans 和我最近就这个主题进行了一些小讨论,我很好奇它是如何真正实现的。

请参阅此处评论中的初始讨论:C# 计时器是否自然是多线程的?

4

2 回答 2

2

盯着 .Net 4.0 参考源,System.Timers.Timer似乎使用 aSystem.Threading.Timer来处理实际的实现细节。后者通过调用生成计时器AddTimerNativeAddTimerNative是内部调用。

谷歌搜索AddTimerNative导致了很多有趣的结果,包括Willy Denoyette的评论,他说它调用了 CreateTimerQueueTimer

该页面声明“回调函数排队到线程池。”

于 2011-06-15T20:18:03.137 回答
2

好吧,我做了一些调查......详细信息在我的博客文章中

简而言之,从那里总结一下:

  • 至于 SSCLI20,Hans 是完全正确的。处理 APC 和排队的计时器确实有单独的线程。谢谢你的坚持,顺便说一句。我有机会挖掘一些有趣的东西:)
  • 在较新的系统上,它仍然可以在没有额外线程的情况下实现。我只是错误地假设它在编写 CLR 2.0 时已经存在。有关详细信息,请参阅 CreateThreadpoolTimer、SetThreadpoolTimer 和 CloseThreadpoolTimer。
于 2011-06-16T01:27:53.720 回答