Task Dependencies
Last updated
This page explains how a task waits on prerequisites and what happens when a prerequisite fails.
Declaring Prerequisites
- 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)
- }
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 state | State: core.Stop | State: core.Skip |
|---|---|---|
TaskCompleted | Satisfied | Satisfied |
TaskFailed | Dependent task marked TaskFailed | Prerequisite ignored |
TaskPending / TaskRunning | Keep waiting | Keep waiting |
| ID missing | Dependent task marked TaskFailed | Dependent task marked TaskFailed |
- The wait limit is fixed at 1 minute;
Wait.Delayis currently not applied - Evaluation uses each prerequisite's current state, not a run in the same trigger cycle
- Prerequisites registered with
func()areTaskCompletedfrom the moment they are added - A dependent task whose state is
TaskRunningorTaskCompletedskips the trigger without checking prerequisites, so after one successful run it is not executed again; aTaskFaileddependent task is evaluated again on its next trigger
See Dependency API for the
Wait and WaitState types.