任務依賴
最後更新
本頁說明任務如何等待前置任務,以及前置任務失敗時的處理方式。
宣告前置任務
- prepareID, err := c.Add("@every 1m", prepare, "prepare")
- if err != nil {
- log.Fatal(err)
- }
- _, err = c.Add("@every 1m", process, "process", []core.Wait{
- {ID: prepareID, State: core.Skip},
- })
- if err != nil {
- log.Fatal(err)
- }
依賴任務的 action 必須為
func() error;func() 搭配前置任務時 Add 會回傳錯誤。判斷規則
有依賴的任務觸發時送入 Wait 佇列,由 Worker 每 1ms 檢查一次前置任務狀態:
| 前置任務狀態 | State: core.Stop | State: core.Skip |
|---|---|---|
TaskCompleted | 視為滿足 | 視為滿足 |
TaskFailed | 依賴任務標記為 TaskFailed | 忽略此前置任務 |
TaskPending/TaskRunning | 繼續等待 | 繼續等待 |
| ID 不存在 | 依賴任務標記為 TaskFailed | 依賴任務標記為 TaskFailed |
- 等待時限固定為 1 分鐘,
Wait.Delay目前未生效 - 判斷依據前置任務的「目前狀態」,不要求在同一輪觸發中完成
- 以
func()註冊的前置任務自加入起即為TaskCompleted - 依賴任務本身狀態為
TaskRunning或TaskCompleted時,觸發會直接略過、不檢查前置任務,因此成功執行一次後不會再執行;狀態為TaskFailed時會在下一次觸發重新判斷
Wait 與 WaitState 型別見 依賴 API。