restic/internal/repository/worker_group.go

28 lines
641 B
Go
Raw Normal View History

package repository
import (
"golang.org/x/sync/errgroup"
)
// RunWorkers runs count instances of workerFunc using an errgroup.Group.
// After all workers have terminated, finalFunc is run. If an error occurs in
// one of the workers, it is returned. FinalFunc is always run, regardless of
// any other previous errors.
2020-03-08 20:48:51 +01:00
func RunWorkers(count int, workerFunc func() error, finalFunc func()) error {
var wg errgroup.Group
// run workers
for i := 0; i < count; i++ {
wg.Go(workerFunc)
}
// wait for termination
err := wg.Wait()
// make sure finalFunc is run
finalFunc()
2020-01-27 16:41:46 +01:00
// return error from workers to the caller
return err
}