code: func (ctl *taskController) AddTimer(ctx context.Context, delay time.Duration, title string, payload []byte) {
  	// ID for the new timer. It is guaranteed to be unique when we land the
  	// transaction because all ctl.saved modifications are serialized in time (see
  	// MutationsCount checks in Save), and we include serial number of such
  	// modification into the timer id (and suffix it with the index of the timer
  	// emitted by this particular modification). If two modification happen
  	// concurrently, they may temporary get same timer ID, but only one will
  	// actually land.
  	timerID := fmt.Sprintf("%s:%d:%d:%d",
  		ctl.JobID(), ctl.InvocationID(),
  		ctl.saved.MutationsCount, len(ctl.timers))
  
  	ctl.DebugLog("Scheduling timer %q (%s) after %s", title, timerID, delay)
  
  	now := clock.Now(ctx)
  	ctl.timers = append(ctl.timers, &internal.Timer{
  		Id:      timerID,
  		Created: google.NewTimestamp(now),
  		Eta:     google.NewTimestamp(now.Add(delay)),
  		Title:   title,
  		Payload: payload,
  	})
  }
docs: // AddTimer is part of Controller interface.