gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:10:10 24 4
gpt4 key购买 nike

我在当前项目中使用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方法将返回一个 *Job实例,您可以将其传递给 scheduler.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)
    }

    关于go - gocron使用参数动态添加和删除任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65389278/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com