gocron 使用参数动态添加和删除任务

我正在使用我当前的项目,我遇到了一些文档中没有的情况。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)

}

当我删除 task() 时,总是被删除。即使我交换它们: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")

有没有办法让我具体指出我要删除的任务,因为唯一允许1?remove()argument


该文档还有一个:scheduler


s := gocron.NewScheduler()

    s.Every(3).Seconds().Do(task)

    <- s.Start()

  1. 什么时候是最好的用例?scheduler

  2. 如果我们完成了调度程序,如何将其从内存中删除?做工作吗?或者我们必须有另一种方法将它们从记忆中清除?scheduler.Clear()


长风秋雁
浏览 315回答 1
1回答

函数式编程

您可以通过对函数处理程序进行重复数据删除来处理删除逻辑。package mainimport (&nbsp; &nbsp; "fmt")func main() {&nbsp; &nbsp; fn1 := func() { taskWithParams(2, "world") }&nbsp; &nbsp; gocron.Every(3).Seconds().Do(fn1)&nbsp; &nbsp; fn2 := func() { taskWithParams(1, "hello") }&nbsp; &nbsp; gocron.Every(2).Seconds().Do(fn2)&nbsp; &nbsp; gocron.Start()&nbsp; &nbsp; time.Sleep(10 * time.Second)&nbsp; &nbsp; gocron.Remove(fn2)}func taskWithParams(a int, b string) {&nbsp; &nbsp; fmt.Println(a, b)}否则,该方法将返回一个可以传递给 的实例。scheduler.Do*Jobscheduler.RemoveByReferencepackage mainimport (&nbsp; &nbsp; "fmt")func main() {&nbsp; &nbsp; job, err := gocron.Every(3).Seconds().Do(taskWithParams, 2, "ww")&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; panic(err)&nbsp; &nbsp; }&nbsp; &nbsp; gocron.Every(2).Seconds().Do(taskWithParams, 1, "hh")&nbsp; &nbsp; gocron.Start()&nbsp; &nbsp; time.Sleep(10 * time.Second)&nbsp; &nbsp; gocron.RemoveByReference(job)}func taskWithParams(a int, b string) {&nbsp; &nbsp; fmt.Println(a, b)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go