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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何獲得 time.Tick 立即打勾

如何獲得 time.Tick 立即打勾

Go
函數(shù)式編程 2021-11-08 16:56:58
我有一個(gè)循環(huán),直到工作啟動(dòng)并運(yùn)行:ticker := time.NewTicker(time.Second * 2)defer ticker.Stop()started := time.Now()for now := range ticker.C {    job, err := client.Job(jobID)    switch err.(type) {    case DoesNotExistError:        continue    case InternalError:        return err    }    if job.State == "running" {        break    }    if now.Sub(started) > time.Minute*2 {        return fmt.Errorf("timed out waiting for job")    }}在生產(chǎn)中效果很好。唯一的問(wèn)題是它使我的測(cè)試變慢。他們都至少等待 2 秒鐘才能完成。有沒(méi)有time.Tick辦法立即打勾?
查看完整描述

3 回答

?
UYOU

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

不幸的是,Go 開(kāi)發(fā)人員似乎不會(huì)在任何可預(yù)見(jiàn)的未來(lái)添加這樣的功能,所以我們必須應(yīng)對(duì)......


有兩種常用的代碼使用方法:


for 環(huán)形

鑒于這樣的事情:


ticker := time.NewTicker(period)

defer ticker.Stop()

for <- ticker.C {

    ...

}

用:


ticker := time.NewTicker(period)

defer ticker.Stop()

for ; true; <- ticker.C {

    ...

}

for-select循環(huán)

鑒于這樣的事情:


interrupt := make(chan os.Signal, 1)

signal.Notify(interrupt, os.Interrupt)


ticker := time.NewTicker(period)

defer ticker.Stop()


loop:

for {

    select {

        case <- ticker.C: 

            f()

        case <- interrupt:

            break loop

    }

}

用:


interrupt := make(chan os.Signal, 1)

signal.Notify(interrupt, os.Interrupt)


ticker := time.NewTicker(period)

defer ticker.Stop()


loop:

for {

    f()


    select {

        case <- ticker.C: 

            continue

        case <- interrupt:

            break loop

    }

}

為什么不直接使用time.Tick()?

盡管 Tick 對(duì)于不需要關(guān)閉 Ticker 的客戶(hù)端很有用,但請(qǐng)注意,如果無(wú)法關(guān)閉它,則垃圾收集器無(wú)法恢復(fù)底層的 Ticker;它“泄漏”。


https://golang.org/pkg/time/#Tick


查看完整回答
反對(duì) 回復(fù) 2021-11-08
?
千萬(wàn)里不及你

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊

ticker := time.NewTicker(period)

for ; true; <-ticker.C {

    ...

}

https://github.com/golang/go/issues/17601




查看完整回答
反對(duì) 回復(fù) 2021-11-08
?
慕村225694

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

Ticker內(nèi)部的實(shí)際實(shí)現(xiàn)是相當(dāng)復(fù)雜的。但是你可以用一個(gè) goroutine 包裝它:


func NewTicker(delay, repeat time.Duration) *time.Ticker {

    ticker := time.NewTicker(repeat)

    oc := ticker.C

    nc := make(chan time.Time, 1)

    go func() {

        nc <- time.Now()

        for tm := range oc {

            nc <- tm

        }

    }()

    ticker.C = nc

    return ticker

}


查看完整回答
反對(duì) 回復(fù) 2021-11-08
  • 3 回答
  • 0 關(guān)注
  • 182 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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