go-zero/core/threading/taskrunner.go

29 lines
436 B
Go
Raw Normal View History

2020-07-26 17:09:05 +08:00
package threading
import (
"zero/core/lang"
"zero/core/rescue"
)
type TaskRunner struct {
limitChan chan lang.PlaceholderType
}
func NewTaskRunner(concurrency int) *TaskRunner {
return &TaskRunner{
limitChan: make(chan lang.PlaceholderType, concurrency),
}
}
func (rp *TaskRunner) Schedule(task func()) {
rp.limitChan <- lang.Placeholder
go func() {
defer rescue.Recover(func() {
<-rp.limitChan
})
task()
}()
}