Exemplo n.º 1
0
 private void Run()
 {
     while (true)
     {
         try
         {
             DutyCheckPackageTimePlan executeTask = m_timerList.OrderBy(t => t.Schedule.ScheduleCycle.NextExecute).FirstOrDefault(t => !t.Running);
             if (executeTask == null)
             {
                 m_planExecutorWaiter.WaitOne();
             }
             //休眠
             Schedule planSchedule = executeTask.Schedule;
             DateTime currTime     = DateTime.Now;
             if (planSchedule.ScheduleCycle.NextExecute != null && !executeTask.Running)
             {
                 int waitTimeout = (int)((planSchedule.ScheduleCycle.NextExecute.Value - currTime).TotalMilliseconds);
                 //误差2分钟内,有效执行
                 if (waitTimeout < 0 && waitTimeout > -2 * 60 * 1000)
                 {
                     waitTimeout = 0;
                 }
                 if (waitTimeout >= 0)
                 {
                     TimePeriod tp = ScheduleUtility.GetPlanTaskTimePeriod(planSchedule, planSchedule.ScheduleCycle.NextExecute.Value);
                     executeTask.Running = true;
                     bool isGenerate = DutyCheckPackageHelper.CheckDutyPackageExist(executeTask.OrganizationId);
                     if (isGenerate)
                     {
                         DutyCheckPackageHelper.AllocationDutychekPackage(executeTask.OrganizationId, DateTime.Now);
                     }
                     var planTask = Task.Delay(waitTimeout).ContinueWith((runTask) => GetDutyCheckPackage());
                 }
             }
         }
         catch (Exception ex)
         {
             _logger.LogError("执行查勤包异常:Message:{0}\r\nStackTrace:{1}", ex.Message, ex.StackTrace);
         }
     }
 }