mirror of https://github.com/q191201771/naza
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
756 B
Go
46 lines
756 B
Go
// Copyright 2019, Chef. All rights reserved.
|
|
// https://github.com/q191201771/naza
|
|
//
|
|
// Use of this source code is governed by a MIT-style license
|
|
// that can be found in the License file.
|
|
//
|
|
// Author: Chef (191201771@qq.com)
|
|
|
|
package taskpool
|
|
|
|
type worker struct {
|
|
taskChan chan taskWrapper
|
|
p *pool
|
|
}
|
|
|
|
func NewWorker(p *pool) *worker {
|
|
return &worker{
|
|
taskChan: make(chan taskWrapper, 1),
|
|
p: p,
|
|
}
|
|
}
|
|
|
|
func (w *worker) Start() {
|
|
go func() {
|
|
for {
|
|
task := <-w.taskChan
|
|
if task.disposeFlag {
|
|
w.p.onDispose(w)
|
|
break
|
|
}
|
|
task.taskFn(task.param...)
|
|
w.p.onIdle(w)
|
|
}
|
|
}()
|
|
}
|
|
|
|
func (w *worker) Stop() {
|
|
w.taskChan <- taskWrapper{
|
|
disposeFlag: true,
|
|
}
|
|
}
|
|
|
|
func (w *worker) Go(t taskWrapper) {
|
|
w.taskChan <- t
|
|
}
|