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

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

如何在響應(yīng)式上下文取消的情況下入睡?

如何在響應(yīng)式上下文取消的情況下入睡?

Go
Smart貓小萌 2023-06-12 17:23:51
在 Go 中,我想要time.Sleep一段時(shí)間(例如在重試之間等待),但如果上下文被取消(不僅是從截止日期,而且是手動(dòng)),我想快速返回。這樣做的正確或最佳方法是什么?謝謝!
查看完整描述

3 回答

?
翻閱古今

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

您可以使用select它來(lái)實(shí)現(xiàn):


package main


import (

    "fmt"

    "time"

    "context"

)


func main() {

    fmt.Println("Hello, playground")

    ctx, cancel := context.WithCancel(context.Background())

    defer cancel()

    go func(){

        t := time.Now()

        select{

        case <-ctx.Done(): //context cancelled

        case <-time.After(2 * time.Second): //timeout

        }

        fmt.Printf("here after: %v\n", time.Since(t))

    }()


    cancel() //cancel manually, comment out to see timeout kick in

    time.Sleep(3 * time.Second)

    fmt.Println("done")


}

這是Go-playground 鏈接


查看完整回答
反對(duì) 回復(fù) 2023-06-12
?
茅侃侃

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

select您可以像其他人提到的那樣使用;但是,其他答案有一個(gè)錯(cuò)誤,因?yàn)閠imer.After()如果不清理就會(huì)泄漏內(nèi)存。


func SleepWithContext(ctx context.Context, d time.Duration) {

    timer := time.NewTimer(d)

    select {

    case <-ctx.Done():

        if !timer.Stop() {

            <-timer.C

        }

    case <-timer.C:

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-06-12
?
拉丁的傳說(shuō)

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

這是一個(gè)sleepContext您可以用來(lái)代替的函數(shù)time.Sleep:


func sleepContext(ctx context.Context, delay time.Duration) {

    select {

    case <-ctx.Done():

    case <-time.After(delay):

    }

}

以及一些示例用法(Go Playground 上的完整可運(yùn)行代碼):


func main() {

    ctx := context.Background()


    fmt.Println(time.Now())

    sleepContext(ctx, 1*time.Second)

    fmt.Println(time.Now())


    ctxTimeout, cancel := context.WithTimeout(ctx, 500*time.Millisecond)

    sleepContext(ctxTimeout, 1*time.Second)

    cancel()

    fmt.Println(time.Now())

}


查看完整回答
反對(duì) 回復(fù) 2023-06-12
  • 3 回答
  • 0 關(guān)注
  • 229 瀏覽
慕課專(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)