You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

26 lines
466 B

package threading
import (
"git.diulo.com/mogfee/kit/core/rescue"
"git.diulo.com/mogfee/kit/lang"
)
type TaskRunner struct {
limitChan chan lang.PlaceholderType
}
func NewTaskRunner(concurrency int) *TaskRunner {
return &TaskRunner{
limitChan: make(chan lang.PlaceholderType, concurrency),
}
}
func (r *TaskRunner) Schedule(task func()) {
r.limitChan <- lang.Placeholder
go func() {
defer rescue.Recover(func() {
<-r.limitChan
})
task()
}()
}