提交 v1.3.0 beta
This commit is contained in:
30
server/common/taskrunner/task_runner.go
Normal file
30
server/common/taskrunner/task_runner.go
Normal file
@ -0,0 +1,30 @@
|
||||
package taskrunner
|
||||
|
||||
import "sync"
|
||||
|
||||
type Runner struct {
|
||||
wg sync.WaitGroup
|
||||
errors []error
|
||||
mux sync.Mutex
|
||||
}
|
||||
|
||||
func (r *Runner) Add(f func() error) {
|
||||
r.wg.Add(1)
|
||||
go func() {
|
||||
defer r.wg.Done()
|
||||
if err := f(); err != nil {
|
||||
r.addError(err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func (r *Runner) addError(err error) {
|
||||
r.mux.Lock()
|
||||
defer r.mux.Unlock()
|
||||
r.errors = append(r.errors, err)
|
||||
}
|
||||
|
||||
func (r *Runner) Wait() []error {
|
||||
r.wg.Wait()
|
||||
return r.errors
|
||||
}
|
Reference in New Issue
Block a user