如果我像这样设置一个计时器:
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/