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() }() }