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

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

優(yōu)先選擇帶渠道的案例

優(yōu)先選擇帶渠道的案例

Go
Smart貓小萌 2022-11-23 15:48:05
我有這個功能,這樣里面的方法就可以自動運行了。我的問題是第二種情況sigC僅在 case ticker.C 完成后才有效,這并不理想,因為程序運行時帶有標志,因此如果我想更改標志并改變程序的行為,我必須等待代碼方法完成運行,這可能需要一些時間。我的目標是當我按下 Ctrl+C 時,程序會立即完成運行。func report() error {    ticker := time.NewTicker(timeConfig)    sigC := make(chan os.Signal, 1)    signal.Notify(sigC, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, os.Interrupt)    for range ticker.C {        select {        case <-ticker.C:            connection = connectionInit()            tagValues, err := fetchLatestTags()            if err != nil {                return err            }            if len(tagValues) >= threshold {                metrics, err := fetchMetrics(tagValues)                if err != nil {                    return err                }                if stdout {                    err = locally(metrics)                    if err != nil {                        return err                    }                } else {                    err = sendMail(metrics)                    if err != nil {                        return err                    }                }            }            connection.Close()        case <-sigC:            return nil        }    }    return nil}
查看完整描述

1 回答

?
蕭十郎

TA貢獻1815條經(jīng)驗 獲得超13個贊

如果我理解正確的話,你想要做的是用無限循環(huán)替換 range-over-channel 循環(huán)。即for range ticker.C { ... }-> for { ... }。


如果您希望程序而不是report函數(shù)立即完成而不等待case <-ticker.C:塊中的代碼完成,您應該在單獨的 goroutine 中執(zhí)行該代碼塊并將case <-sigC:塊從更新return nil為os.Exit(1).


func report() {

    ticker := time.NewTicker(timeConfig)

    defer ticker.Stop()


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

    signal.Notify(sigC, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT, os.Interrupt)


    for {

        select {

        case <-ticker.C:

            go func() {

                connection = connectionInit()


                tagValues, err := fetchLatestTags()

                if err != nil {

                    return

                }

                if len(tagValues) >= threshold {

                    metrics, err := fetchMetrics(tagValues)

                    if err != nil {

                        return

                    }

                    if stdout {

                        err = locally(metrics)

                        if err != nil {

                            return

                        }

                    } else {

                        err = sendMail(metrics)

                        if err != nil {

                            return

                        }

                    }

                }

                connection.Close()

            }()

        case <-sigC:

            os.Exit(1)

        }

    }

}


查看完整回答
反對 回復 2022-11-23
  • 1 回答
  • 0 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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