第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在golang中停止周期性函數(shù)

如何在golang中停止周期性函數(shù)

Go
婷婷同學(xué)_ 2022-11-08 15:24:16
所以我有一個每 2 秒調(diào)用一次的函數(shù)。像這樣package mainimport (    "fmt"    "time")func doEvery(d time.Duration, f func(time.Time)) {    for x := range time.Tick(d) {        f(x)    }}func helloworld(t time.Time) {    fmt.Printf("%v: Hello, World!\n", t)}func main() {    doEvery(20*time.Millisecond, helloworld)}現(xiàn)在假設(shè)我不再希望此函數(shù)每 2 秒執(zhí)行一次。有沒有辦法在golang中實現(xiàn)這一點?或者有沒有比這更好的方法在 golang 中調(diào)用周期性函數(shù)?謝謝你。
查看完整描述

1 回答

?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗 獲得超4個贊

time.Tick()無法停止的狀態(tài)文檔:

Tick 是 NewTicker 的便捷包裝器,僅提供對 ticking 通道的訪問。雖然 Tick對于不需要關(guān)閉 Ticker 的客戶端很有用,但請注意,如果沒有辦法將其關(guān)閉,則底層 Ticker 無法被垃圾收集器恢復(fù);它“泄漏”。

如果您需要停止它,請改用它time.NewTicker()。在一個新的 goroutine 中運(yùn)行doEvery(),并傳遞一個通道給它,它可以讓你停止它,例如通過關(guān)閉通道:

func doEvery(d time.Duration, done chan bool, f func(time.Time)) {

    ticker := time.NewTicker(d)

    defer ticker.Stop()


    for {

        select {

        case <-done:

            fmt.Println("Done!")

            return

        case t := <-ticker.C:

            f(t)

        }

    }

}

測試它:


done := make(chan bool)

go doEvery(300*time.Millisecond, done, helloworld)


time.Sleep(time.Second)

close(done)


time.Sleep(time.Second)

fmt.Println("Quitting")

這將輸出(在Go Playground上嘗試):


2009-11-10 23:00:00.3 +0000 UTC m=+0.300000001: Hello, World!

2009-11-10 23:00:00.6 +0000 UTC m=+0.600000001: Hello, World!

2009-11-10 23:00:00.9 +0000 UTC m=+0.900000001: Hello, World!

Done!

Quitting


查看完整回答
反對 回復(fù) 2022-11-08
  • 1 回答
  • 0 關(guān)注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號