Exemple #1
0
// Wait for all waiters in list
// list must be a slice of Waiters (or types witch implement Waiter)
func WaitForAll(list interface{}) error {
	if list == nil {
		return nil
	}

	var (
		err errors.List
	)

	v := reflect.ValueOf(list)
	t := v.Type()

	if t.Kind() != reflect.Slice || !t.Elem().Implements(waiterType) {
		panic(fmt.Sprintf("WaitForAll(list): expected []Waiter (%v %+v)", v.Type(), list))
	}

	for i, l := 0, v.Len(); i < l; i++ {
		w := v.Index(i).Interface().(Waiter)
		err.Add(w.Wait())
	}

	return err.Normalize()
}