| 104 | } |
| 105 | |
| 106 | func (executor *SimpleTaskExecutor) ScheduleAtFixedRate(task Task, initialDelay time.Duration, period time.Duration) (ScheduledTask, error) { |
| 107 | if task == nil { |
| 108 | return nil, errors.New("task cannot be nil") |
| 109 | } |
| 110 | |
| 111 | executor.executorMu.Lock() |
| 112 | |
| 113 | if executor.isShutdown { |
| 114 | executor.executorMu.Unlock() |
| 115 | return nil, errors.New("no new task won't be accepted because executor is already shut down") |
| 116 | } |
| 117 | |
| 118 | executor.nextSequence++ |
| 119 | scheduledTask, err := CreateScheduledRunnableTask(executor.nextSequence, task, executor.calculateTriggerTime(initialDelay), period, true) |
| 120 | executor.executorMu.Unlock() |
| 121 | |
| 122 | if err != nil { |
| 123 | return nil, err |
| 124 | } |
| 125 | |
| 126 | executor.addNewTask(scheduledTask) |
| 127 | |
| 128 | return scheduledTask, nil |
| 129 | } |
| 130 | |
| 131 | func (executor *SimpleTaskExecutor) IsShutdown() bool { |
| 132 | executor.executorMu.Lock() |