2013-11-14 2 views
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)); 
    } 
} 
+0

Вы можете изменить '&& bUpdatedPortedNumbersToday == true' в' && bUpdatedPortedNumbersToday', то же самое на втором 'if'. Затем, почему вы проверяете каждые 10 и 2 минуты, если вы хотите, чтобы этот запуск выполнялся один раз в день? последнее, почему у вас нет комментариев, объясняющих, какова ваша логика, поэтому люди, которые могут вам помочь, могут действительно прочитать ваш код? – Noctis

ответ

0

Я предлагаю лучше регистрировать выполнение. Когда вы говорите, что это работает более одного раза в день, что вы имеете в виду? Когда он работает? Когда он должен работать?

Я бы предположил, что DateTime.Parse("01:00") и DateTime.Parse("03:30") вернуть true, если вы этого не ожидаете. Возможно, формат даты не подходит по какой-то причине и возвращает true даже в 13.00 и 15.30?

Надеюсь, я помог!

0

Вы установили bRunPortedNumberUpdater в true только в пределах цикла, поэтому в следующий раз через цикл он снова запустит WorkerMethod().

Я подозреваю, что вы действительно хотите сделать, это установить bRunPortedNumberUpdater к ложным после запуска WorkerMethod()

Смежные вопросы