gocron创建多个任务实例

时间:2017-06-25 11:52:10

标签: go

我在使用此软件包的脚本中遇到了问题:

    "github.com/jasonlvhit/gocron"

在我找不到错误之后,我写了这个小测试文件,结果是执行的cronjobs数量是预期的两倍:

func main() {
    for i := 0; i < 3; i++ {
        channel := make(chan string)
        go taskCron(channel, i)
    }

    time.Sleep(time.Second * 5)
    gocron.Clear()
    fmt.Println("stop this shit")
}

func task(i int) {
    fmt.Println("still running...", i)
}

func taskCron(channel chan string, i int) {
    gocron.Every(4).Seconds().Do(task, i)
    <-gocron.Start()
}

运行它给了我这个输出:

——▶go run *.go
still running... 0
still running... 0
still running... 1
still running... 1
still running... 2
still running... 2
still running... 0
still running... 1
still running... 2
stop this

有谁知道如何创建动态数量的gocron作业而不重复它们?

谢谢:)

1 个答案:

答案 0 :(得分:0)

好吧显然

<-gocron.Start()

将启动已经重新启动的作业,以解决我的问题,我不得不将脚本更改为:

func main() {
    for i := 0; i < 3; i++ {
        taskCron(i)
    }
    channel2 := make(chan int)
    go startCron(channel2)

    time.Sleep(time.Second * 5)
    gocron.Clear()
    fmt.Println("stop this")
}

func task(i int) {
    fmt.Println("still running...", i)
}

func taskCron(i int) {
    gocron.Every(4).Seconds().Do(task, i)
}

func startCron(channel chan int) {
    <-gocron.Start()
}

我希望这可以帮助任何有同样问题的人!