hishtory/shared/utils.go
David Dworken 7c07236dc0
Revert "Swap to using iterators for uploading to avoid storing all chunks in memory"
This reverts commit 632ecc5c819742fec397623e47387dd2ad5a1b04.
2024-02-04 22:19:11 -08:00

33 lines
505 B
Go

package shared
import "sync"
func ForEach[T any](arr []T, numThreads int, fn func(T) error) error {
wg := &sync.WaitGroup{}
wg.Add(len(arr))
limiter := make(chan bool, numThreads)
var errors []error
for _, item := range arr {
limiter <- true
go func(x T) {
defer wg.Done()
err := fn(x)
if err != nil {
errors = append(errors, err)
}
<-limiter
}(item)
if len(errors) > 0 {
return errors[0]
}
}
wg.Wait()
if len(errors) > 0 {
return errors[0]
}
return nil
}