【发布时间】:2009-11-08 23:48:25
【问题描述】:
我有一个 Windows 服务应用程序,它使用 Threading.Timer 和 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
}
}
这是一种安全的方法吗?如果队列变得相当大,会发生什么?有更好的选择吗?
【问题讨论】:
标签: c# multithreading locking