github.com/codingeasygo/util@v0.0.0-20231206062002-1ce2f004b7d9/runner/runner.go (about) 1 package runner 2 3 import ( 4 "fmt" 5 "log" 6 "time" 7 ) 8 9 //ErrNotTask is error for not task 10 var ErrNotTask = fmt.Errorf("not task") 11 12 //NamedRunner will run call by delay 13 func NamedRunner(name string, delay time.Duration, running *bool, call func() error) { 14 log.Printf("%v is starting", name) 15 var finishCount = 0 16 for *running { 17 err := call() 18 if err == nil { 19 finishCount++ 20 continue 21 } 22 if err != ErrNotTask { 23 log.Printf("%v is fail with %v", name, err) 24 } else if finishCount > 0 { 25 log.Printf("%v is having %v finished", name, finishCount) 26 } 27 finishCount = 0 28 time.Sleep(delay) 29 } 30 log.Printf("%v is stopped", name) 31 }