Add a util.Forever variant that ends on a stop channel

This commit is contained in:
Clayton Coleman
2014-11-28 15:14:49 -05:00
parent 6aabd9804f
commit 740b824ac2
2 changed files with 32 additions and 0 deletions

View File

@@ -51,7 +51,19 @@ func HandleCrash() {
// Forever loops forever running f every d. Catches any panics, and keeps going.
func Forever(f func(), period time.Duration) {
Until(f, period, nil)
}
// Until loops until stop channel is closed, running f every d.
// Catches any panics, and keeps going. f may not be invoked if
// stop channel is already closed.
func Until(f func(), period time.Duration, stopCh <-chan struct{}) {
for {
select {
case <-stopCh:
return
default:
}
func() {
defer HandleCrash()
f()