繁体   English   中英

主线程计时器Vs线程

[英]main thread timer Vs Thread

我有一个Windows服务,在主线程上启动计时器。 计时器的工作是将xml文件加载到内存,对值进行一些处理并将结果保存回文件。 例如,处理可能需要10分钟。 (让我们称这个操作为A)

我还有一个线程,它通过WCF在更新xml文件的同一服务上生成。 (让我们调用此操作B)

发生的事情是操作A正在运行,操作B在操作A完成之前运行完成。 最终结果是操作A覆盖了操作B完成的所有工作。

所以我认为我需要做的是:

  1. 当操作A启动时,如果操作B正在运行,则等待操作B完成然后执行操作A.

  2. 当操作B启动时,如果操作A正在运行,则等待操作A完成然后执行操作B.

如果我能做到这一点,我认为我不会有问题。

我希望这是有道理的 - 我的等待理论是最好的方法吗? 我怎样才能在c#(或者最好的方法)中做到这一点?

谢谢达莫

通过在C#中使用lock语句可以轻松解决这个问题。

所有你需要的是两个代码段都可以访问的某个对象的实例(类型无关紧要)。

public static void MethodA(object lockObject)
{
    lock(lockObject)
    {
        //code that needs to be accessed by just one thread
    }
}

public static void MethodB(object lockObject)
{
    lock(lockObject)
    {
        //code that needs to be accessed by just one thread
    }
}

如果这两个操作都是从定时器触发的,那么你应该确保添加额外的等待不会让你到达执行代码的时间超过定时器间隔的时间点。 如果你这样做,你最终会比他们完成更快地解雇新代码,并且总会有越来越多的实例在运行。 (如果先前的任务仍在运行,则无法解决问题。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM