code: func (engine *DockerTaskEngine) AddTask(task *apitask.Task) {
  	defer metrics.MetricsEngineGlobal.RecordTaskEngineMetric("ADD_TASK")()
  	err := task.PostUnmarshalTask(engine.cfg, engine.credentialsManager,
  		engine.resourceFields, engine.client, engine.ctx)
  	if err != nil {
  		seelog.Errorf("Task engine [%s]: unable to add task to the engine: %v", task.Arn, err)
  		task.SetKnownStatus(apitaskstatus.TaskStopped)
  		task.SetDesiredStatus(apitaskstatus.TaskStopped)
  		engine.emitTaskEvent(task, err.Error())
  		return
  	}
  
  	engine.tasksLock.Lock()
  	defer engine.tasksLock.Unlock()
  
  	existingTask, exists := engine.state.TaskByArn(task.Arn)
  	if !exists {
  		// This will update the container desired status
  		task.UpdateDesiredStatus()
  
  		engine.state.AddTask(task)
  		if dependencygraph.ValidDependencies(task) {
  			engine.startTask(task)
  		} else {
  			seelog.Errorf("Task engine [%s]: unable to progress task with circular dependencies", task.Arn)
  			task.SetKnownStatus(apitaskstatus.TaskStopped)
  			task.SetDesiredStatus(apitaskstatus.TaskStopped)
  			err := TaskDependencyError{task.Arn}
  			engine.emitTaskEvent(task, err.Error())
  		}
  		return
  	}
  
  	// Update task
  	engine.updateTaskUnsafe(existingTask, task)
  }
docs: // AddTask starts tracking a task