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

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

http.TimeoutHandler 返回但 handlerfunc 繼續(xù)運(yùn)行

http.TimeoutHandler 返回但 handlerfunc 繼續(xù)運(yùn)行

Go
回首憶惘然 2023-08-21 14:28:40
我正在測(cè)試http.timeoutHandler我的Go Web服務(wù)器,我注意到3秒后我的客戶(hù)端調(diào)用收到一條“ Timeout”消息,但2秒后我可以在服務(wù)器日志上看到消息“My func Println”。為什么TimeoutHandler沒(méi)有取消我的func1?這是我正在使用的代碼:package mainimport (        "fmt"        "io"        "net/http"        "time")func func1(w http.ResponseWriter, req *http.Request) {        time.Sleep(5 * time.Second)        fmt.Println("My func Println")        io.WriteString(w, "My func!\n")}func main() {        srv := http.Server{                Addr:         ":9000",                WriteTimeout: 5 * time.Second,                Handler:      http.TimeoutHandler(http.HandlerFunc(func1), 3*time.Second, "Timeout!\n"),        }        if err := srv.ListenAndServe(); err != nil {                fmt.Printf("Server failed: %s\n", err)        }}
查看完整描述

1 回答

?
眼眸繁星

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

是的,這就是它的工作原理。


當(dāng)超時(shí)發(fā)生并且您的處理程序函數(shù)仍然運(yùn)行(尚未返回)時(shí),請(qǐng)求的上下文將被取消。您的處理程序負(fù)責(zé)監(jiān)視 Context 的 Done 通道,并在請(qǐng)求取消時(shí)中止其工作。每個(gè)處理程序都在自己的 goroutine 中運(yùn)行,并且 goroutine 不能從“外部”被終止或中斷。


如何做到這一點(diǎn)的示例:


func func1(w http.ResponseWriter, req *http.Request) {

    select {

    case <-time.After(5 * time.Second):

        fmt.Println("My func Println")

        io.WriteString(w, "My func!\n")

    case <-req.Context().Done():

        fmt.Println("Cancelled")

    }

}

這將輸出:


Cancelled

如果您將處理程序中的延遲更改為 2 秒:


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

輸出將是:


My func Println

客戶(hù)端收到發(fā)送的數(shù)據(jù):


My func!


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