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

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

沒有取消傳播的上下文

沒有取消傳播的上下文

Go
翻閱古今 2023-06-01 14:24:13
我如何創(chuàng)建一個(gè) Go 上下文的副本(如果你愿意的話,一個(gè)克隆),它包含存儲(chǔ)在原始文件中的所有值,但不會(huì)在原始文件被取消時(shí)被取消?對(duì)我來(lái)說(shuō),這確實(shí)是一個(gè)有效的用例。假設(shè)我有一個(gè) http 請(qǐng)求,它的上下文在響應(yīng)返回給客戶端后被取消,我需要在這個(gè)請(qǐng)求結(jié)束時(shí)在一個(gè)單獨(dú)的 goroutine 中運(yùn)行一個(gè)異步任務(wù),這個(gè) goroutine 很可能比父上下文活得更久。func Handler(ctx context.Context) (interface{}, error) {        result := doStuff(ctx)        newContext := howDoICloneYou(ctx)        go func() {                doSomethingElse(newContext)        }()        return result}誰(shuí)能建議應(yīng)該如何完成?當(dāng)然,我可以跟蹤所有可能放入上下文中的值,創(chuàng)建一個(gè)新的背景 ctx,然后遍歷每個(gè)可能的值并復(fù)制……但這看起來(lái)很乏味,而且很難在大型代碼庫(kù)中進(jìn)行管理。
查看完整描述

3 回答

?
慕蓋茨4494581

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

由于 context.Context 是一個(gè)接口,您可以簡(jiǎn)單地創(chuàng)建自己的永遠(yuǎn)不會(huì)取消的實(shí)現(xiàn):


import (

    "context"

    "time"

)


type noCancel struct {

    ctx context.Context

}


func (c noCancel) Deadline() (time.Time, bool)       { return time.Time{}, false }

func (c noCancel) Done() <-chan struct{}             { return nil }

func (c noCancel) Err() error                        { return nil }

func (c noCancel) Value(key interface{}) interface{} { return c.ctx.Value(key) }


// WithoutCancel returns a context that is never canceled.

func WithoutCancel(ctx context.Context) context.Context {

    return noCancel{ctx: ctx}

}


查看完整回答
反對(duì) 回復(fù) 2023-06-01
?
MYYA

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

誰(shuí)能建議應(yīng)該如何完成?

是的。不要這樣做。

如果您需要不同的上下文,例如對(duì)于您的異步后臺(tái)任務(wù),則創(chuàng)建一個(gè)新的上下文。您的傳入上下文和您的后臺(tái)任務(wù)之一無(wú)關(guān),因此您不能嘗試重用傳入的上下文。

如果不相關(guān)的新上下文需要來(lái)自原始上下文的一些數(shù)據(jù):復(fù)制您需要的內(nèi)容并添加新內(nèi)容。


查看完整回答
反對(duì) 回復(fù) 2023-06-01
?
月關(guān)寶盒

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

從 go 1.21 開始,此功能將通過(guò)以下方式直接在標(biāo)準(zhǔn)庫(kù)中提供context.WithoutCancel

func?WithoutCancel(parent?Context)?Context

WithoutCancel返回 parent 的副本,當(dāng) parent 被取消時(shí),該副本未被取消。返回的上下文不返回Deadlineor?Err,其Done通道為nil。調(diào)用Cause返回的上下文返回nil。


查看完整回答
反對(duì) 回復(fù) 2023-06-01
  • 3 回答
  • 0 關(guān)注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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