mirror of
https://gitee.com/willfree/mlsr.git
synced 2026-10-04 19:42:02 +08:00
84 lines
2.0 KiB
Go
84 lines
2.0 KiB
Go
// Package lsdb
|
|
// @Author: Wang Feng
|
|
// @Description:
|
|
// @Version: 0.1.0
|
|
// @Date: 2022/4/1 18:17
|
|
// @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
|
//
|
|
|
|
package lsdb
|
|
|
|
import (
|
|
"github.com/go-co-op/gocron"
|
|
"time"
|
|
)
|
|
|
|
//
|
|
// Scheduler
|
|
// @Description: 封装了goCron的调度器
|
|
//
|
|
type MlsrScheduler struct {
|
|
sche *gocron.Scheduler
|
|
}
|
|
|
|
//
|
|
// Init
|
|
// @Description: 调度器初始化
|
|
// @receiver s
|
|
//
|
|
func (s *MlsrScheduler) Init() {
|
|
// UTC表示unix标准时间,与北京时区不同,但不影响任务执行
|
|
s.sche = gocron.NewScheduler(time.UTC)
|
|
}
|
|
|
|
//
|
|
// ScheduleTaskAfterDuration
|
|
// @Description: 安排任务在一定时间后触发,触发一次
|
|
// @receiver s
|
|
// @param dur 时间间隔
|
|
//
|
|
func (s *MlsrScheduler) ScheduleTaskAfterDuration(dur time.Duration, intervalSeconds int) *gocron.Scheduler {
|
|
timeRun := time.Now()
|
|
timeRun = timeRun.Add(dur)
|
|
return s.scheduleRecurringTaskAtTime(timeRun, intervalSeconds)
|
|
}
|
|
|
|
//
|
|
// ScheduleTaskAtTime
|
|
// @Description: 安排任务在某个时间执行一次
|
|
// @receiver s
|
|
// @param timeRun 执行时间
|
|
//
|
|
func (s *MlsrScheduler) ScheduleTaskAtTime(timeRun time.Time, intervalSeconds int) *gocron.Scheduler {
|
|
return s.scheduleRecurringTaskAtTime(timeRun, intervalSeconds)
|
|
}
|
|
|
|
//
|
|
// scheduleRecurringTaskAtTime
|
|
// @Description: 安排执行某次循环性任务
|
|
// @receiver s
|
|
// @param timeRun 首次执行时间
|
|
// @param intervalSeconds 执行间隔(单位:秒)
|
|
//
|
|
func (s *MlsrScheduler) scheduleRecurringTaskAtTime(timeRun time.Time, intervalSeconds int) *gocron.Scheduler {
|
|
// 判断调度器是否还在正常运行
|
|
if (s.sche == nil) || (!s.sche.IsRunning()) {
|
|
s.Init()
|
|
}
|
|
// 安排任务执行
|
|
return s.sche.Every(intervalSeconds).Seconds().StartAt(timeRun)
|
|
}
|
|
|
|
func (s *MlsrScheduler) StartAsync() {
|
|
s.sche.StartAsync()
|
|
}
|
|
|
|
//
|
|
// Close
|
|
// @Description: 关闭调度器
|
|
// @receiver s
|
|
//
|
|
func (s *MlsrScheduler) Close() {
|
|
s.sche.Clear()
|
|
}
|