Spaces:
Runtime error
Runtime error
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() { | |
select { | |
case _, _ = <-c.ch: | |
default: | |
c.ch <- struct{}{} | |
close(c.ch) | |
} | |
} | |