每日任务运行的次数超过应有的次数

时间:2013-11-14 06:14:47

标签: c# windows-services

以下代码在成功完成后每天运行多次,但不应该。为什么呢?

请注意,此代码在其自己的线程上运行,而不是主应用程序的线程。

public bool bRunPortedNumberUpdater = false;
public bool bUpdatedPortedNumbersToday = false;

private void MainMethod()
{
    while (true)
    {
        try
        {
            if (DateTime.Now >= DateTime.Parse("00:01") 
                && DateTime.Now <= DateTime.Parse("00:59") 
                && bUpdatedPortedNumbersToday == true)
            {
                bUpdatedPortedNumbersToday = false;
            }
            if (DateTime.Now >= DateTime.Parse("01:00") 
                && DateTime.Now <= DateTime.Parse("03:30") 
                && bRunPortedNumberUpdater == false 
                && bUpdatedPortedNumbersToday == false)
            {
                bRunPortedNumberUpdater = true;
            }
            if (bRunPortedNumberUpdater)
            {
                WorkerMethod();
            }

        }
        catch (Exception ex)
        {
            //log error
        }
        Thread.Sleep(TimeSpan.FromMinutes(10));
    }
}

private void WorkerMethod()
{
    while (bRunPortedNumberUpdater)
    {
        try
        {
            //do some long running job
            //when long running job complete I set values as such:
            bUpdatedPortedNumbersToday = true;
            bRunPortedNumberUpdater = false;

        }
        catch (Exception ex)
        {
            //log error
        }
        Thread.Sleep(TimeSpan.FromMinutes(2));
    }
}

2 个答案:

答案 0 :(得分:0)

我建议更好地记录执行情况。当你说它每天运行不止一次时,你的意思是什么?什么时候运行?什么时候应该运行?

我猜想DateTime.Parse("01:00")DateTime.Parse("03:30")会在您不期望的时候返回true。也许,日期时间格式由于某种原因不正确,即使在13.00和15.30也会返回?

希望我帮忙!

答案 1 :(得分:0)

您只在循环中将bRunPortedNumberUpdater设置为true,因此下次循环时会导致WorkerMethod()再次运行。

我怀疑你真正想要做的是在bRunPortedNumberUpdater

运行后将WorkerMethod()设置为false