// +build ignore,OMIT

package pkg

// long_tail_memcache_bad
func myHandler(w http.ResponseWriter, r *http.Request) {
	c := appengine.NewContext(r)
	// ...
	// regular request handling
	// ...

	go memcache.Set(c, &memcache.Item{
		Key:   key,
		Value: data,
	})
}

// long_tail_memcache_good
func myHandler(w http.ResponseWriter, r *http.Request) {
	c := appengine.NewContext(r)
	// ...
	// regular request handling
	// ...

	// Save to memcache, but only wait up to 3ms.
	done := make(chan bool, 1) // NB: buffered
	go func() {
		memcache.Set(c, &memcache.Item{
			Key:   key,
			Value: data,
		})
		done <- true
	}()
	select { // HL
	case <-done: // HL
	case <-time.After(3 * time.Millisecond): // HL
	} // HL
}
