2 回答
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()先调用然后停止调度程序并不重要,您可以简单地退出程序。
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
}
- 2 回答
- 0 关注
- 146 浏览
添加回答
举报