code: func (d *Dispatcher) AddTask(c context.Context, tasks ...*Task) error {
  	return d.runBatchesPerQueue(c, tasks, func(c context.Context, queue string, tasks []*taskqueue.Task) error {
  		if err := taskqueue.Add(c, queue, tasks...); err != nil {
  			return errors.Filter(err, taskqueue.ErrTaskAlreadyAdded)
  		}
  		return nil
  	})
  }
docs: // AddTask submits given tasks to an appropriate task queue.
  //
  // It means, at some later time in some other GAE process, callbacks registered
  // as handlers for corresponding proto types will be called.
  //
  // If the given context is transactional or namespaced, inherits the
  // transaction/namespace. Note if running outside of a transaction and multiple
  // tasks are passed, the operation is not atomic: it returns an error if at
  // least one enqueue operation failed (there's no way to figure out which one
  // exactly).
  //
  // Returns only transient errors. Unlike regular Task Queue's Add,
  // ErrTaskAlreadyAdded is not considered an error.