alist/pkg/cron/cron.go

40 lines
476 B
Go
Raw Permalink Normal View History

2022-08-31 12:46:19 +00:00
package cron
import "time"
type Cron struct {
d time.Duration
ch chan struct{}
}
func NewCron(d time.Duration) *Cron {
return &Cron{
d: d,
ch: make(chan struct{}),
}
}
func (c *Cron) Do(f func()) {
go func() {
ticker := time.NewTicker(c.d)
defer ticker.Stop()
for {
select {
case <-ticker.C:
f()
case <-c.ch:
return
}
}
}()
}
func (c *Cron) Stop() {
2022-09-14 07:13:02 +00:00
select {
case _, _ = <-c.ch:
default:
c.ch <- struct{}{}
close(c.ch)
}
2022-08-31 12:46:19 +00:00
}