我有一个Windows服务应用程序,它使用a Threading.Timer和a TimerCallback以特定间隔进行一些处理.我需要一次将此处理代码锁定为仅1个线程.
因此,例如,启动服务并触发第一个回调并启动线程并开始处理.只要在下一次回调之前完成处理,这就可以正常工作.所以说比如说处理比平常花费的时间稍长,并且在另一个线程正在处理时再次触发TimerCallback,我需要让该线程等到另一个线程完成.
这是我的代码示例:
static Timer timer;
static object locker = new object();
public void Start()
{
var callback = new TimerCallback(DoSomething);
timer = new Timer(callback, null, 0, 10000);
}
public void DoSomething()
{
lock(locker)
{
// my processing code
}
}
Run Code Online (Sandbox Code Playgroud)
这是一种安全的方法吗?如果队列变得相当大,会发生什么?有更好的选择吗?