()
| 162 | } |
| 163 | |
| 164 | func (executor *SimpleTaskExecutor) run() { |
| 165 | |
| 166 | for { |
| 167 | executor.taskQueue.SorByTriggerTime() |
| 168 | |
| 169 | if len(executor.taskQueue) == 0 { |
| 170 | executor.timer.Stop() |
| 171 | } else { |
| 172 | executor.timer.Reset(executor.taskQueue[0].getDelay()) |
| 173 | } |
| 174 | |
| 175 | for { |
| 176 | select { |
| 177 | case clock := <-executor.timer.C: |
| 178 | executor.timer.Stop() |
| 179 | |
| 180 | taskIndex := -1 |
| 181 | for index, scheduledTask := range executor.taskQueue { |
| 182 | |
| 183 | if scheduledTask.triggerTime.After(clock) || scheduledTask.triggerTime.IsZero() { |
| 184 | break |
| 185 | } |
| 186 | |
| 187 | taskIndex = index |
| 188 | |
| 189 | if scheduledTask.IsCancelled() { |
| 190 | continue |
| 191 | } |
| 192 | |
| 193 | if scheduledTask.isPeriodic() && scheduledTask.isFixedRate() { |
| 194 | scheduledTask.triggerTime = scheduledTask.triggerTime.Add(scheduledTask.period) |
| 195 | } |
| 196 | |
| 197 | executor.startTask(scheduledTask) |
| 198 | } |
| 199 | |
| 200 | executor.taskQueue = executor.taskQueue[taskIndex+1:] |
| 201 | case newScheduledTask := <-executor.newTaskChannel: |
| 202 | executor.timer.Stop() |
| 203 | executor.taskQueue = append(executor.taskQueue, newScheduledTask) |
| 204 | case rescheduledTask := <-executor.rescheduleTaskChannel: |
| 205 | executor.timer.Stop() |
| 206 | executor.taskQueue = append(executor.taskQueue, rescheduledTask) |
| 207 | case stoppedChan := <-executor.shutdownChannel: |
| 208 | executor.timer.Stop() |
| 209 | executor.taskWaitGroup.Wait() |
| 210 | stoppedChan <- true |
| 211 | return |
| 212 | } |
| 213 | |
| 214 | break |
| 215 | } |
| 216 | |
| 217 | } |
| 218 | |
| 219 | } |
| 220 | |
| 221 | func (executor *SimpleTaskExecutor) startTask(scheduledRunnableTask *ScheduledRunnableTask) { |
no test coverage detected