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