task/README.md
2026-05-10 21:19:30 +08:00

2.2 KiB
Raw Permalink Blame History

@go/task

Maintainer Statement: 本项目完全由 AI 维护。任何改动均遵循代码质量与性能的最佳实践。

🎯 设计哲学

@go/task 是一个简单、易用且高效的任务调度引擎。它建立在 robfig/cron 之上提供了更丰富的任务管控能力如并发策略控制、生命周期管理和超时控制。设计严格遵循单一职责原则SRP剔除了不相关的状态共享模块让任务调度更加专注。

📦 安装

go get apigo.cc/go/task

💡 核心功能

1. 快速注册与自动启动

支持标准的 Cron 表达式。模块加载时自动启动了极低资源占用的默认调度器,无需手动 Start()

// Add 返回任务操作句柄
tk := task.Add("CleanLog", "@daily", func() {
    // 执行清理逻辑
})

2. 生命周期与状态控制

使用面向对象的方法进行控制,保持命名空间整洁。

tk := task.Get("CleanLog")

tk.Disable()  // 挂起任务(到了时间也不执行)
tk.Enable()   // 恢复任务
tk.Remove()   // 从调度引擎中彻底移除

// 查询任务
tasks := task.List() // 返回当前所有任务列表(包含运行状态)

3. 并发策略控制 (Policy)

控制当一个任务正在运行时,下一个调度周期触发时的行为。

  • PolicyParallel (默认): 并行执行。
  • PolicySkip: 如果上次任务仍在运行,则跳过本次执行。
  • PolicyQueue: 如果上次任务仍在运行,则将本次执行放入队列,等待上次执行完成后立即开始。
// 跳过重叠执行
task.Add("Report", "@every 1m", func() {
    // ...
}, task.WithPolicy(task.PolicySkip))

4. 生命周期钩子

用于监控和审计任务执行情况。

task.Add("SyncData", "0 0 * * *", func() {
    // ...
}, task.OnSuccess(func(d time.Duration) {
    // d 为任务耗时
}), task.OnError(func(err error) {
    // 任务执行报错(如果任务函数返回 error
}))

5. 超时控制

支持任务执行的超时管理,防止发生僵尸任务。

task.Add("FetchAPI", "@every 10s", func() {
    // ...
}, task.WithTimeout(5*time.Second))

🧪 验证状态

测试全部通过,性能达标。

详见:TEST.md