/** * Add a task - or run it immediately when $this->started * * @param Task $task The task * * @return $this|mixed $this or the task return value when this is running */ public function addTask(Task $task) { $deferred = false; foreach (array('before', 'after') as $type) { if ($task->get($type)) { $deferred = true; foreach ((array) $task->get($type) as $name) { if ($name === '@self') { $name = $this->get('name'); } $key = $type . ':' . $name; $this->job->deferredTasks[$key][] = $task; } } } if ($this->initialized || $deferred) { $task->initialize(); } if (!$deferred && $this->started) { return $this->runTask($task); } if (!$deferred) { $this->tasks[] = $task; } return $this; }