EasyVQD/pkg/vqdcms/worker.go
2026-01-27 10:42:21 +08:00

57 lines
838 B
Go

package vqdcms
import (
"context"
"time"
)
type Worker struct {
ctx context.Context
cancel context.CancelFunc
}
func NewWorker() *Worker {
ctx, cancel := context.WithCancel(context.Background())
return &Worker{
ctx: ctx,
cancel: cancel,
}
}
func (w *Worker) Stop() {
w.cancel() // 显式调用cancel停止worker
}
type Scheduler struct {
stopChan chan struct{}
}
func NewScheduler() *Scheduler {
return &Scheduler{
stopChan: make(chan struct{}),
}
}
func (s *Scheduler) Start(interval time.Duration, task func()) {
go func() {
ticker := time.NewTicker(interval)
defer ticker.Stop()
for {
select {
case <-ticker.C:
task()
case <-s.stopChan:
return
}
}
}()
}
func (s *Scheduler) Stop() {
if s.stopChan != nil {
close(s.stopChan)
s.stopChan = nil // 防止重复关闭
}
}