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

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

即使經(jīng)過很短的時間,Go 程序也會永遠(yuǎn)休眠。

即使經(jīng)過很短的時間,Go 程序也會永遠(yuǎn)休眠。

Go
森欄 2023-07-17 15:15:02
我正在嘗試在 Go 中構(gòu)建一些缺少的信號量。盡管當(dāng)通道接收到信號時它就會永遠(yuǎn)休眠。我嘗試過改變睡眠方式和睡眠時間,但它仍然永遠(yuǎn)停止。這是我嘗試過的表示:func main() {    backOffChan := make(chan struct{})    go func() {        time.Sleep(2)        backOffChan <- struct{}{}    }()    for {        select {        case <-backOffChan:            d := time.Duration(5 * time.Second)            log.Println("reconnecting in %s", d)            select {            case <-time.After(d):                log.Println("reconnected after %s", d)                return            }        default:        }    }}我希望它在打印日志消息并返回后返回。
查看完整描述

1 回答

?
暮色呼如

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

這段代碼有很多問題,主要是使用for/的緊密循環(huán)select可能不允許其他 goroutine 在通道上發(fā)送。由于default箱子是空的并且select只有一個,因此不需要case整個箱子。select以下代碼可以正確運行:


backOffChan := make(chan struct{})

go func() {

    time.Sleep(1 * time.Millisecond)

    backOffChan <- struct{}{}

}()

for range backOffChan {

    d := time.Duration(10 * time.Millisecond)

    log.Printf("reconnecting in %s", d)

    select {

    case <-time.After(d):

        log.Printf("reconnected after %s", d)

        return

    }

}

這將等到backOffChan收到消息而不燒緊循環(huán)。


(請注意,此代碼還解決了使用log.Println格式化指令的問題 - 這些問題已更正為log.Printf)。


在這里查看它的實際效果:https ://play.golang.org/p/ksAzOq5ekrm


查看完整回答
反對 回復(fù) 2023-07-17
  • 1 回答
  • 0 關(guān)注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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