0

以下代码在成功完成后每天运行一次以上,但不应如此。为什么?

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

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));
    }
}
4

2 回答 2

0

bRunPortedNumberUpdater仅在循环内设置为 true,因此下次通过循环时会WorkerMethod()再次运行。

我怀疑你真正想做的是bRunPortedNumberUpdater在运行后设置为 falseWorkerMethod()

于 2013-11-14T10:31:44.323 回答
0

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

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

希望我有所帮助!

于 2013-11-14T07:34:25.930 回答