gocron 使用参数动态添加和删除任务
gocron to add and remove task dynamically with parameter
我在当前的项目中使用 gocron
,我遇到了一些文档中没有的情况。
我测试这段代码:
gocron.Every(3).Seconds().Do(taskWithParams,2,"world")
gocron.Every(2).Seconds().Do(taskWithParams,1, "hello")
gocron.Start()
time.Sleep(10 * time.Second)
gocron.Remove(taskWithParams)//<-- remove task
...
func taskWithParams(a int, b string) {
fmt.Println(a, b)
}
当我删除任务(gocron.Remove(taskWithParams)
)时,总是删除 gocron.Every(3).Seconds().Do(taskWithParams,2,"world")
。甚至我交换它们:
gocron.Every(2).Seconds().Do(taskWithParams,1, "hello")
gocron.Every(3).Seconds().Do(taskWithParams,2,"world")
有没有办法让我明确指出我要删除哪个任务,因为 remove()
只允许 1 个 argument
?
文档还有一个scheduler
:
s := gocron.NewScheduler()
s.Every(3).Seconds().Do(task)
<- s.Start()
scheduler
的最佳用例是什么时候?
- 如果我们完成了调度程序,如何将其从内存中删除?
scheduler.Clear()
做这份工作吗?或者我们必须有另一种方法将它们从内存中清除?
您可以通过删除函数处理程序来处理删除逻辑。
package main
import (
"fmt"
)
func main() {
fn1 := func() { taskWithParams(2, "world") }
gocron.Every(3).Seconds().Do(fn1)
fn2 := func() { taskWithParams(1, "hello") }
gocron.Every(2).Seconds().Do(fn2)
gocron.Start()
time.Sleep(10 * time.Second)
gocron.Remove(fn2)
}
func taskWithParams(a int, b string) {
fmt.Println(a, b)
}
否则,scheduler.Do
方法 returns 您可以传递给 scheduler.RemoveByReference
的 *Job
实例。
package main
import (
"fmt"
)
func main() {
job, err := gocron.Every(3).Seconds().Do(taskWithParams, 2, "ww")
if err != nil {
panic(err)
}
gocron.Every(2).Seconds().Do(taskWithParams, 1, "hh")
gocron.Start()
time.Sleep(10 * time.Second)
gocron.RemoveByReference(job)
}
func taskWithParams(a int, b string) {
fmt.Println(a, b)
}
我在当前的项目中使用 gocron
,我遇到了一些文档中没有的情况。
我测试这段代码:
gocron.Every(3).Seconds().Do(taskWithParams,2,"world")
gocron.Every(2).Seconds().Do(taskWithParams,1, "hello")
gocron.Start()
time.Sleep(10 * time.Second)
gocron.Remove(taskWithParams)//<-- remove task
...
func taskWithParams(a int, b string) {
fmt.Println(a, b)
}
当我删除任务(gocron.Remove(taskWithParams)
)时,总是删除 gocron.Every(3).Seconds().Do(taskWithParams,2,"world")
。甚至我交换它们:
gocron.Every(2).Seconds().Do(taskWithParams,1, "hello")
gocron.Every(3).Seconds().Do(taskWithParams,2,"world")
有没有办法让我明确指出我要删除哪个任务,因为 remove()
只允许 1 个 argument
?
文档还有一个scheduler
:
s := gocron.NewScheduler()
s.Every(3).Seconds().Do(task)
<- s.Start()
scheduler
的最佳用例是什么时候?- 如果我们完成了调度程序,如何将其从内存中删除?
scheduler.Clear()
做这份工作吗?或者我们必须有另一种方法将它们从内存中清除?
您可以通过删除函数处理程序来处理删除逻辑。
package main
import (
"fmt"
)
func main() {
fn1 := func() { taskWithParams(2, "world") }
gocron.Every(3).Seconds().Do(fn1)
fn2 := func() { taskWithParams(1, "hello") }
gocron.Every(2).Seconds().Do(fn2)
gocron.Start()
time.Sleep(10 * time.Second)
gocron.Remove(fn2)
}
func taskWithParams(a int, b string) {
fmt.Println(a, b)
}
否则,scheduler.Do
方法 returns 您可以传递给 scheduler.RemoveByReference
的 *Job
实例。
package main
import (
"fmt"
)
func main() {
job, err := gocron.Every(3).Seconds().Do(taskWithParams, 2, "ww")
if err != nil {
panic(err)
}
gocron.Every(2).Seconds().Do(taskWithParams, 1, "hh")
gocron.Start()
time.Sleep(10 * time.Second)
gocron.RemoveByReference(job)
}
func taskWithParams(a int, b string) {
fmt.Println(a, b)
}