C# 定时器回调

标签 c# .net timer

如果我像这样设置一个计时器:

var MyTimer = new Timer(RunTask, AutoEvent, 1000, 2000);

是否保证 RunTask 始终在同一线程上运行?

我所有的测试似乎都表明是这样,但这是保证还是运气?

这非常重要,因为我需要存储持续调用调用的变量,并且我目前正在对它们使用 [ThreadStatic] 属性。

我知道,如果回调使线程保持的时间比计时器延迟的时间长,则计时器将在另一个线程上执行另一个回调;所以我将问题缩小到没有并行运行的情况(我在回调期间阻止了计时器)。

最佳答案

System.Threading.TimerCallback 委托(delegate)允许您将上下文对象传递给回调方法。您可以使用此上下文对象在回调处理程序中传递所需的状态。这样,您在哪个线程上被回调都无关紧要,因为您不需要使用 ThreadStatic。

传递给 Timer 构造函数的 state 参数将传递给回调方法。

关于C# 定时器回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45843016/

相关文章:

java - 可以在运行时为 @Schedule 注释更改 ejb 参数吗?

multithreading - 从另一个线程原子地取消 asio 异步计时器

javascript - setInterval 和 setTimeout 不匹配

c# - 为什么 lock(objLock) 比 lock(this) 更好

c# - 使用反射设置类实例的字段

.net - 如何完全禁用log4net

c# - 远程关闭后保持管道打开的最佳方法

c# - 在 C# 控制台应用程序中实现的 gRPC 中收到的客户端证书为空

c# - Javascript和c#之间的编解码

C# 列格式化