code: func (ctl *taskController) consumeTimer(timerID string) (bool, error) {
  	if ctl.consumedTimers != nil && ctl.consumedTimers.Has(timerID) {
  		return false, nil // already consumed
  	}
  	timers, err := unmarshalTimersList(ctl.saved.PendingTimersRaw)
  	if err != nil {
  		return false, err
  	}
  	for _, t := range timers {
  		if t.Id == timerID {
  			if ctl.consumedTimers == nil {
  				ctl.consumedTimers = stringset.New(1)
  			}
  			ctl.consumedTimers.Add(timerID)
  			return true, nil
  		}
  	}
  	return false, nil
  }
docs: // consumeTimer removes the given timer from the invocation, if it is there.
  //
  // Returns true if it was there, false if it wasn't, or an error on
  // deserialization errors.
  //
  // We can't modify 'saved' in place, since it is supposed to always match
  // what is (or has been) in the datastore. So delay the entity modification
  // until Save() call.