为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
长风秋雁 2022-08-01 10:14:38
我正在使用我当前的项目,我遇到了一些文档中没有的情况。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该文档还有一个:schedulers := gocron.NewScheduler()    s.Every(3).Seconds().Do(task)    <- s.Start()什么时候是最好的用例?scheduler如果我们完成了调度程序,如何将其从内存中删除?做工作吗?或者我们必须有另一种方法将它们从记忆中清除?scheduler.Clear()
查看完整描述

1 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

您可以通过对函数处理程序进行重复数据删除来处理删除逻辑。


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*Jobscheduler.RemoveByReference


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)

}


查看完整回答
反对 回复 2022-08-01
  • 1 回答
  • 0 关注
  • 314 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信