v1.2.1

任務依賴

最後更新


本頁說明任務如何等待前置任務,以及前置任務失敗時的處理方式。

宣告前置任務


  1. prepareID, err := c.Add("@every 1m", prepare, "prepare")
  2. if err != nil {
  3. log.Fatal(err)
  4. }
  5. _, err = c.Add("@every 1m", process, "process", []core.Wait{
  6. {ID: prepareID, State: core.Skip},
  7. })
  8. if err != nil {
  9. log.Fatal(err)
  10. }

依賴任務的 action 必須為 func() error;func() 搭配前置任務時 Add 會回傳錯誤。

判斷規則


有依賴的任務觸發時送入 Wait 佇列,由 Worker 每 1ms 檢查一次前置任務狀態:
前置任務狀態State: core.StopState: core.Skip
TaskCompleted視為滿足視為滿足
TaskFailed依賴任務標記為 TaskFailed忽略此前置任務
TaskPending/TaskRunning繼續等待繼續等待
ID 不存在依賴任務標記為 TaskFailed依賴任務標記為 TaskFailed

  • 等待時限固定為 1 分鐘,Wait.Delay 目前未生效
  • 判斷依據前置任務的「目前狀態」,不要求在同一輪觸發中完成
  • 以 func() 註冊的前置任務自加入起即為 TaskCompleted
  • 依賴任務本身狀態為 TaskRunning 或 TaskCompleted 時,觸發會直接略過、不檢查前置任務,因此成功執行一次後不會再執行;狀態為 TaskFailed 時會在下一次觸發重新判斷

Wait 與 WaitState 型別見 依賴 API。
EN