package parallel
import (
"sync"
)
// Run executes the provided functions in parallel and collects any errors they return.
func Run(fns ...func() error) []error {
wg := sync.WaitGroup{}
errCh := make(chan error, len(fns))
wg.Add(len(fns))
for i := range fns {
go func(i int) {
if err := fns[i](); err != nil {
errCh <- err
}
wg.Done()
}(i)
}
wg.Wait()
close(errCh)
var errs []error
for err := range errCh {
errs = append(errs, err)
}
return errs
}