4 Star 5 Fork 5

Plato/Service-Box-go

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
wrapper.go 1.27 KB
一键复制 编辑 原始数据 按行查看 历史
package scheduler
type (
baseTaskWrapper struct {
handle TimerHandler
exec TimerFunc
owner *goCornTimer
running bool
}
// runLimitsTask 限制次数类函数包装,
runLimitsWrapper struct {
*baseTaskWrapper
count int
maxCount int
}
// abortTask 在函数抛出错误时候中断定时器执行
abortWrapper struct {
*baseTaskWrapper
}
)
func (wp *runLimitsWrapper) runTask() {
defer func() {
if err := recover(); err != nil {
wp.cancel()
}
}()
// 非可执行状态
if !wp.running {
return
}
// 执行指令
err := wp.exec()
if err != nil {
wp.cancel()
}
// 计算执行次数,达到上限则执行,也停止业务
wp.count++
if wp.count >= wp.maxCount {
wp.cancel()
return
}
}
func (wp *runLimitsWrapper) cancel() {
// 设置状态不可执行
wp.running = false
// 通知调度器删除
_ = wp.owner.CancelTimer(wp.handle)
}
func (wp *abortWrapper) runTask() {
defer func() {
if err := recover(); err != nil {
wp.cancel()
}
}()
// 非可执行状态
if !wp.running {
return
}
// 执行指令
err := wp.exec()
if err != nil {
wp.cancel()
}
}
func (wp *abortWrapper) cancel() {
// 设置状态不可执行
wp.running = false
// 通知调度器删除
_ = wp.owner.CancelTimer(wp.handle)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/dennis-kk/service-box-go.git
git@gitee.com:dennis-kk/service-box-go.git
dennis-kk
service-box-go
Service-Box-go
v0.5.25

搜索帮助