System.Timers.Timer与System.Threading.Timer的线程安全性

在本文中: http : //msdn.microsoft.com/en-us/magazine/cc164015.aspx作者声明System.Threading.Timer不是线程安全的

从那以后,在Rich的书“CLR via C#”上的博客上重复了这一点,但这绝不合理。

此外, MSDN文档确保“此类型是线程安全的”。

1)谁说实话?

2)如果这是原始文章是什么使System.Threading.Timer不是线程安全的,它的包装器System.Timers.Timer如何实现更multithreading安全?

谢谢

不,这不是它的工作方式。 .NET异步Timer类是完全线程安全的。 线程安全的问题在于它不是传递属性,它也不会使其他代码也执行线程安全。 您编写的代码,而不是.NET Framework程序员。

与Windows UI代码基本上是线程不安全的非常普遍的假设是同一类问题。 事实并非如此,Windows中的代码完全是线程安全的。 问题是运行的所有代码都不是Windows的一部分,而不是由Microsoft程序员编写的。 由SendMessage()调用触发的代码总是很多 。 它运行程序员编写的自定义代码。 或者他没有编写的代码,就像某个实用程序安装的钩子一样。 代码假定程序不会使其变得困难并且只在一个线程上执行消息处理程序。 他通常会这样做,而不是这样做会给他带来很多麻烦。

与System.Timers.Timer.Elapsed事件和System.Threading.Timer回调相同的问题。 程序员在编写代码时犯了很多错误。 它在任意线程池线程上异步运行,触摸任何共享变量确实需要锁定以保护状态。 很容易被忽视。 更糟糕的是,更糟糕的是,在上一次调用停止运行之前,当代码再次运行时,很容易陷入一堆麻烦。 定时器间隔过低或机器负载过重时触发。 现在有两个线程运行相同的代码,很少有好的结果。

线程很难,新闻十一点。