code: func (tm *taskManager) Do(tasks []task, a *Agent) []taskResult {
  	results := make([]taskResult, 0, len(tasks))
  	for _, t := range tasks {
  		taskFunc, err := tm.mapper(t, a)
  		if err == nil {
  			err = taskFunc()
  		}
  
  		results = append(results, taskResult{task: t, err: err})
  
  		if err != nil {
  			break
  		}
  	}
  
  	return results
  }
docs: // Do attempts to complete a series of tasks against an Agent. Each task
  // is executed in order. If any task is unable to be attempted, or is able
  // to be attempted but fails, Do will halt execution. The returned slice
  // will contain a taskResult for every task that was attempted. Do is not
  // threadsafe.