databoard-transform/worker.go

42 lines
667 B
Go
Raw Normal View History

package main
import (
"log"
"sync"
)
// WorkerContext 上下文
type WorkerContext struct {
wg *sync.WaitGroup
}
// Done 必须在Handler里结束时处理. 默认defer cxt.Done()
func (cxt *WorkerContext) Done() {
cxt.wg.Done()
}
// Worker 主进程
type Worker struct {
cxt *WorkerContext
}
var worker = func() *Worker {
w := &Worker{}
w.cxt = &WorkerContext{}
2020-12-09 10:11:52 +00:00
w.cxt.wg = &sync.WaitGroup{}
return w
}()
// Handler 处理方法
func (w *Worker) Handler(handleFunc func(cxt *WorkerContext)) {
2020-12-09 10:11:52 +00:00
w.cxt.wg.Add(1)
go handleFunc(w.cxt)
}
// Run 运行
func (w *Worker) Run() {
log.Println("worker running")
2020-12-09 10:11:52 +00:00
w.cxt.wg.Wait()
log.Println("worker stop")
}