1 回答

TA貢獻1827條經驗 獲得超8個贊
在寫問題時,我記得 Golang 源代碼非常容易閱讀……并且認為我應該在看起來很傻之前先看一眼。我對我的發現很滿意 :)
如果報價閱讀器落后,它將開始丟棄報價,而不是阻塞寫入通道(緩沖區只有 1)。這樣做的效果是在我們錯過一個或多個滴答時立即讓事情回到“正軌”。
示例證明:
package main
import (
? ? "fmt"
? ? "time"
)
func main() {
? ? t := time.NewTicker(time.Millisecond * 50)
? ? for i := 0; i < 10; i++ {
? ? ? ? fmt.Printf("New invocation starting at %dms\n", time.Now().Round(time.Millisecond).Nanosecond()/int(time.Millisecond))
? ? ? ? if i%3 == 0 {
? ? ? ? ? ? fmt.Println("Executing for 25ms")
? ? ? ? ? ? time.Sleep(time.Millisecond * 25)
? ? ? ? } else {
? ? ? ? ? ? fmt.Println("Executing for 75ms")
? ? ? ? ? ? time.Sleep(time.Millisecond * 75)
? ? ? ? }
? ? ? ? fmt.Println("Waiting for ticker...")
? ? ? ? <-t.C
? ? }
? ? t.Stop()
}
輸出:
New invocation starting at 0ms
Executing for 25ms
Waiting for ticker...
New invocation starting at 50ms
Executing for 75ms
Waiting for ticker...
New invocation starting at 125ms
Executing for 75ms
Waiting for ticker...
New invocation starting at 200ms
Executing for 25ms
Waiting for ticker...
New invocation starting at 250ms
Executing for 75ms
Waiting for ticker...
New invocation starting at 325ms
Executing for 75ms
Waiting for ticker...
New invocation starting at 400ms
Executing for 25ms
Waiting for ticker...
New invocation starting at 450ms
Executing for 75ms
Waiting for ticker...
New invocation starting at 525ms
Executing for 75ms
Waiting for ticker...
New invocation starting at 600ms
Executing for 25ms
Waiting for ticker...
- 1 回答
- 0 關注
- 194 瀏覽
添加回答
舉報