multithreading - .NET - 多个计时器实例意味着多个线程?

标签 multithreading c#-4.0 .net-4.0 timer

我已经有一个运行着 System.Timers.Timer 的 Windows 服务来完成特定的工作。但是,我希望一些作品同时运行,但在不同的线程中。

有人告诉我创建一个不同的 System.Timers.Timer 实例。它是否正确?这种方式并行运行吗?

例如:

System.Timers.Timer tmr1 = new System.Timers.Timer();
tmr1.Elapsed += new ElapsedEventHandler(DoWork1);
tmr1.Interval = 5000;

System.Timers.Timer tmr2 = new System.Timers.Timer();
tmr2.Elapsed += new ElapsedEventHandler(DoWork2);
tmr2.Interval = 5000;

tmr1tmr2 是否会在不同的线程上运行,以便DoWork1DoWork2 可以同时运行,即同时?

谢谢!

最佳答案

这并没有错。

小心点。 System.Timers.Timer 将为每个 Elapsed 事件启动一个新线程。如果 Elapsed 事件处理程序花费的时间太长,您就会遇到麻烦。您的处理程序将在另一个线程上再次调用,即使之前的调用尚未完成。这往往会产生难以诊断的错误。您可以通过将 AutoReset 属性设置为 false 来避免这种情况。还要确保在事件处理程序中使用 try/catch,异常会在没有诊断的情况下被吞噬。

关于multithreading - .NET - 多个计时器实例意味着多个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18001733/

相关文章:

multithreading - Cython:使 prange 并行化线程安全

c# - XNA 中的线程

java - Java生产者使用者问题中使用Atomic Integer的奇怪输出

asp.net-mvc - ASP.NET MVC4 路由 - 到同一位置的多个路由

c# - .NET中如何使用反射判断和检查程序集中的类型是Custom类型还是Primitive类型?

c - 如何在posix线程之间切换?

抽象实现接口(interface)上的 C# 协变

c# - 为什么 C# 不推断我的泛型类型?

c# - 在 .NET 4.0 中签署 SamlAssertion

c# - 尝试通过 .NET Linq 中的 where 子句集合查找一些标签