wait_event.go 336 B

12345678910111213141516171819
  1. package missinggo
  2. import (
  3. "reflect"
  4. "sync"
  5. )
  6. func WaitEvents(l sync.Locker, evs ...*Event) {
  7. cases := make([]reflect.SelectCase, 0, len(evs))
  8. for _, ev := range evs {
  9. cases = append(cases, reflect.SelectCase{
  10. Dir: reflect.SelectRecv,
  11. Chan: reflect.ValueOf(ev.C()),
  12. })
  13. }
  14. l.Unlock()
  15. reflect.Select(cases)
  16. l.Lock()
  17. }