bilibili-backup/app/job/main/growup/service/ctrl/executor.go
2019-04-22 02:59:20 +00:00

41 lines
777 B
Go

package ctrl
import (
"context"
"reflect"
"runtime"
"sync"
"go-common/library/log"
)
func NewUnboundedExecutor() *UnboundedExecutor {
ctx := context.Background()
return &UnboundedExecutor{
ctx: ctx,
}
}
type UnboundedExecutor struct {
wg sync.WaitGroup
// for future extension
ctx context.Context
}
type Executor interface {
Submit(bizFunc ...func(ctx context.Context))
}
func (executor *UnboundedExecutor) Submit(bizFunc ...func(c context.Context)) {
for _, biz := range bizFunc {
pc := reflect.ValueOf(biz).Pointer()
funcName := runtime.FuncForPC(pc).Name()
executor.wg.Add(1)
go func(funcName string, biz func(ctx context.Context)) {
defer executor.wg.Done()
log.Info("Exec Task %s", funcName)
biz(executor.ctx)
}(funcName, biz)
}
}