v1.2.1

Task Dependencies

Last updated


This page explains how a task waits on prerequisites and what happens when a prerequisite fails.

Declaring Prerequisites


  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. }

The dependent task's action must be func() error; Add rejects func() combined with prerequisites.

Evaluation Rules


When a dependent task fires, it enters the wait queue and a worker checks prerequisite states every 1ms:
Prerequisite stateState: core.StopState: core.Skip
TaskCompletedSatisfiedSatisfied
TaskFailedDependent task marked TaskFailedPrerequisite ignored
TaskPending / TaskRunningKeep waitingKeep waiting
ID missingDependent task marked TaskFailedDependent task marked TaskFailed

  • The wait limit is fixed at 1 minute; Wait.Delay is currently not applied
  • Evaluation uses each prerequisite's current state, not a run in the same trigger cycle
  • Prerequisites registered with func() are TaskCompleted from the moment they are added
  • A dependent task whose state is TaskRunning or TaskCompleted skips the trigger without checking prerequisites, so after one successful run it is not executed again; a TaskFailed dependent task is evaluated again on its next trigger

See Dependency API for the Wait and WaitState types.
中文