이동에서 반복되는 백그라운드 작업을 수행 할 수있는 방법이 있습니까? Java에서 Timer.schedule(task, delay, period)
과 같은 것을 생각하고 있습니다. 나는 goroutine과 Time.sleep()
으로 이것을 할 수 있다는 것을 알고 있지만, 나는 쉽게 멈추는 것을 원합니다.Golang의 간격으로 반복적 인 작업을 수행 할 수있는 방법이 있습니까?
다음은 내가 가지고 있지만,보기 흉한 것 같습니다. 클리너/더 좋은 방법이 있습니까?
package main
import (
"fmt"
"time"
)
func schedule(what func(), delay time.Duration) chan bool {
stop := make(chan bool)
go func() {
for {
what()
select {
case <-time.After(delay):
case <-stop:
return
}
}
}()
return stop
}
func main() {
ping := func() { fmt.Println("#") }
stop := schedule(ping, 5*time.Millisecond)
time.Sleep(25 * time.Millisecond)
stop <- true
time.Sleep(25 * time.Millisecond)
fmt.Println("Done")
}
(x)는 사용자의 예에 time.Duration를 이용해 주셔서 감사합니다. 내가 찾을 수있는 모든 예제는 하드 코드 된 int 있습니다 및 int (또는 부동) vars 사용할 때 불평합니다. –
@MikeGraf 당신은't : = time.Tick (time.Duration (period) * time)을 할 수 있습니다.초)'기간이'int' 인 곳 – florianrosenberg
이 해결책은 IMO가 꽤 좋은 것처럼 보입니다. 특히 단순히 외부 time.AfterFunc 대신 f()를 호출하면됩니다. 작업이 완료된 후 x 초 후에 일관된 간격으로 작업을 수행하려는 경우에 유용합니다. –