|
Timers được dùng khi bạn muốn thực hiện một việc một lần duy nhất ở tương lai - tickers được dùng khi bạn muốn thực hiện một việc lặp đi lặp lại vào các khoảng thời gian đều đặn. Dưới đây là một ví dụ của một ticker thực hiện một việc lặp lại định kì cho đến khi chúng ta dừng nó lại. |
|
![]()
package main |
|
import ( "fmt" "time" ) |
|
func main() { |
|
|
Tickers sử dụng một cơ chế tương tự như timers: một
channel được gửi các giá trị. Ở đây chúng ta sẽ sử dụng hàm
|
ticker := time.NewTicker(500 * time.Millisecond)
done := make(chan bool)
|
go func() { for { select { case <-done: return case t := <-ticker.C: fmt.Println("Tick at", t) } } }() |
|
|
Tickers cũng có thể bị dừng giống như timers. Một khi mà ticker bị dừng thì nó sẽ không nhận bất kì giá trị nào gửi đến channel của nó nữa. Chúng ta sẽ dừng tickers của mình sau 1600ms. |
time.Sleep(1600 * time.Millisecond)
ticker.Stop()
done <- true
fmt.Println("Ticker stopped")
}
|
|
Khi chúng ta chạy chương trình này thì ticker sẽ lặp lại 3 lần trước khi chúng ta dừng nó. |
$ go run tickers.go Tick at 2012-09-23 11:29:56.487625 -0700 PDT Tick at 2012-09-23 11:29:56.988063 -0700 PDT Tick at 2012-09-23 11:29:57.488076 -0700 PDT Ticker stopped |
Ví dụ tiếp theo: Worker Pools.