相关疑难解决方法(0)

使用带有Threading.Timer的锁

我有一个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)

这是一种安全的方法吗?如果队列变得相当大,会发生什么?有更好的选择吗?

c# multithreading locking

14
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×1

locking ×1

multithreading ×1