12345678910111213141516171819202122232425262728293031 |
- package threading
- import (
- "github.com/tal-tech/go-zero/core/lang"
- "github.com/tal-tech/go-zero/core/rescue"
- )
- // A TaskRunner is used to control the concurrency of goroutines.
- type TaskRunner struct {
- limitChan chan lang.PlaceholderType
- }
- // NewTaskRunner returns a TaskRunner.
- func NewTaskRunner(concurrency int) *TaskRunner {
- return &TaskRunner{
- limitChan: make(chan lang.PlaceholderType, concurrency),
- }
- }
- // Schedule schedules a task to run under concurrency control.
- func (rp *TaskRunner) Schedule(task func()) {
- rp.limitChan <- lang.Placeholder
- go func() {
- defer rescue.Recover(func() {
- <-rp.limitChan
- })
- task()
- }()
- }
|