以下代码在成功完成后每天运行多次,但不应该。为什么呢?
请注意,此代码在其自己的线程上运行,而不是主应用程序的线程。
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));
}
}
答案 0 :(得分:0)
我建议更好地记录执行情况。当你说它每天运行不止一次时,你的意思是什么?什么时候运行?什么时候应该运行?
我猜想DateTime.Parse("01:00")
和DateTime.Parse("03:30")
会在您不期望的时候返回true。也许,日期时间格式由于某种原因不正确,即使在13.00和15.30也会返回?
希望我帮忙!
答案 1 :(得分:0)
您只在循环中将bRunPortedNumberUpdater
设置为true,因此下次循环时会导致WorkerMethod()
再次运行。
我怀疑你真正想要做的是在bRunPortedNumberUpdater
WorkerMethod()
设置为false