code: func (b *Buffer) runThen(gen func(chan<- func() error), then func()) <-chan error {
  	b.init()
  	return runImpl(gen, b.workC, then)
  }
docs: // Run implements the same semantics as Runner's Run. However, if the
  // dispatch pipeline is full, Run will buffer the work and return immediately
  // rather than block.