exec.go 473 B

123456789101112131415161718192021222324252627282930
  1. package signal
  2. func executeAndFulfill(f func() error, done chan<- error) {
  3. err := f()
  4. if err != nil {
  5. done <- err
  6. }
  7. close(done)
  8. }
  9. func ExecuteAsync(f func() error) <-chan error {
  10. done := make(chan error, 1)
  11. go executeAndFulfill(f, done)
  12. return done
  13. }
  14. func ErrorOrFinish2(c1, c2 <-chan error) error {
  15. select {
  16. case err, failed := <-c1:
  17. if failed {
  18. return err
  19. }
  20. return <-c2
  21. case err, failed := <-c2:
  22. if failed {
  23. return err
  24. }
  25. return <-c1
  26. }
  27. }