猿问

GOLANG 中的 CRON 作业

我在 CRON PKG 中使用 https://github.com/jasonlvhit/gocron/blob/master/gocron.go


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() {

    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 源代码,但找不到方法


谢谢你们


当年话下
浏览 147回答 2
2回答

慕田峪4524236

首先,您正在创建一个新的调度程序并等待它,但使用默认调度程序来运行您的作业。接下来,您将阻塞该Start()方法返回的通道。关闭该通道以解除对接收操作的阻止。如果您没有立即退出,这也将退出 cron 程序中的主循环main。func main() {&nbsp; &nbsp; ch := gocron.Start()&nbsp; &nbsp; go test(ch)&nbsp; &nbsp; gocron.Every(5).Seconds().Do(task)&nbsp; &nbsp; gocron.Every(10).Seconds().Do(vijay)&nbsp; &nbsp; <-ch}func test(stop chan bool) {&nbsp; &nbsp; time.Sleep(20 * time.Second)&nbsp; &nbsp; gocron.Clear()&nbsp; &nbsp; fmt.Println("All task removed")&nbsp; &nbsp; close(stop)}这实际上与func main() {&nbsp; &nbsp; gocron.Start()&nbsp; &nbsp; gocron.Every(5).Seconds().Do(task)&nbsp; &nbsp; gocron.Every(10).Seconds().Do(vijay)&nbsp; &nbsp; time.Sleep(20 * time.Second)&nbsp; &nbsp; gocron.Clear()&nbsp; &nbsp; fmt.Println("All task removed")}如果您立即退出,那么您是否Clear()先调用然后停止调度程序并不重要,您可以简单地退出程序。

蝴蝶刀刀

JimB 权利。但我不知道你为什么使用gocron方法和s方法。这个例子工作正常:package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "time"&nbsp; &nbsp; "github.com/claudiu/gocron")func task() {&nbsp; &nbsp; fmt.Println("I am runnning task.", time.Now())}func vijay() {&nbsp; &nbsp; fmt.Println("I am runnning vijay.", time.Now())}func main() {&nbsp; &nbsp; s := gocron.NewScheduler()&nbsp; &nbsp; s.Every(2).Seconds().Do(task)&nbsp; &nbsp; s.Every(4).Seconds().Do(vijay)&nbsp; &nbsp; sc := s.Start() // keep the channel&nbsp; &nbsp; go test(s, sc)&nbsp; // wait&nbsp; &nbsp; <-sc&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // it will happens if the channel is closed}func test(s *gocron.Scheduler, sc chan bool) {&nbsp; &nbsp; time.Sleep(8 * time.Second)&nbsp; &nbsp; s.Clear()&nbsp; &nbsp; fmt.Println("All task removed")&nbsp; &nbsp; close(sc) // close the channel}
随时随地看视频慕课网APP

相关分类

Go
我要回答