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

GOLANG 中的 CRON 作业

GOLANG 中的 CRON 作业

Go
当年话下 2021-11-29 19:17:34
我在 CRON PKG 中使用 https://github.com/jasonlvhit/gocron/blob/master/gocron.goimport (    "fmt"    "time"    "github.com/claudiu/gocron")func task() {    fmt.Println("I am runnning task.", time.Now())}func vijay() {    fmt.Println("I am runnning vijay.", time.Now())}func main() {    go test()    gocron.Start()    s := gocron.NewScheduler()    gocron.Every(5).Seconds().Do(task)    gocron.Every(10).Seconds().Do(vijay)    <-s.Start()}func test() {    time.Sleep(20 * time.Second)    gocron.Clear()    fmt.Println("All task removed")}我的问题是删除所有作业后,我的程序仍在执行我想在删除所有工作后中断执行请帮帮我,我不知道怎么做,我也尝试更改 PKG 源代码,但找不到方法谢谢你们
查看完整描述

2 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

首先,您正在创建一个新的调度程序并等待它,但使用默认调度程序来运行您的作业。


接下来,您将阻塞该Start()方法返回的通道。关闭该通道以解除对接收操作的阻止。如果您没有立即退出,这也将退出 cron 程序中的主循环main。


func main() {

    ch := gocron.Start()

    go test(ch)

    gocron.Every(5).Seconds().Do(task)

    gocron.Every(10).Seconds().Do(vijay)


    <-ch

}

func test(stop chan bool) {

    time.Sleep(20 * time.Second)

    gocron.Clear()

    fmt.Println("All task removed")

    close(stop)

}

这实际上与


func main() {

    gocron.Start()

    gocron.Every(5).Seconds().Do(task)

    gocron.Every(10).Seconds().Do(vijay)


    time.Sleep(20 * time.Second)


    gocron.Clear()

    fmt.Println("All task removed")

}

如果您立即退出,那么您是否Clear()先调用然后停止调度程序并不重要,您可以简单地退出程序。


查看完整回答
反对 回复 2021-11-29
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

JimB 权利。但我不知道你为什么使用gocron方法和s方法。这个例子工作正常:


package main


import (

    "fmt"

    "time"


    "github.com/claudiu/gocron"

)


func task() {

    fmt.Println("I am runnning task.", time.Now())

}

func vijay() {

    fmt.Println("I am runnning vijay.", time.Now())

}


func main() {

    s := gocron.NewScheduler()

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

    s.Every(4).Seconds().Do(vijay)


    sc := s.Start() // keep the channel

    go test(s, sc)  // wait

    <-sc            // it will happens if the channel is closed

}

func test(s *gocron.Scheduler, sc chan bool) {

    time.Sleep(8 * time.Second)

    s.Clear()

    fmt.Println("All task removed")

    close(sc) // close the channel

}


查看完整回答
反对 回复 2021-11-29
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

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