Агар контексти аслии дархости HTTP-ро ба GoRoutine гузоред, чӣ мешавад?
sobes.tech AI
Ҷавоб аз AI
Агар шумо муоширати аслӣ (context.Context)-и дархости HTTP-ро ба як goroutine ҷудогона гузоред, вақте ки ин контекст бекор ё тамом мешавад (масалан, вақте ки муштарӣ пайвастро мебандад ё вақти интизорӣ тамом мешавад), контексти дар goroutine низ бекор мешавад. Ин метавонад ба қатъномаи нопайдоии кори goroutine оварда расонад, агар он аз ин контекст вобаста бошад.
Аз ин рӯ, агар goroutine бояд мустақил аз давраи ҳаёти дархости HTTP кор кунад, беҳтар аст, ки контексти ҷудогона (масалан, бо истифода аз context.Background() ё context.WithCancel()) эҷод кунед, то аз анҷоми пеш аз вақт пешгирӣ кунед. Дар акси ҳол, истифодаи контексти аслӣ барои идоракунии дурустии вақти ҳаёти амалҳо, ки бо дархост алоқаманданд, муфид аст.
Масалан:
func handler(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
go func(ctx context.Context) {
// Ин goroutine, агар ctx бекор шавад, ба охир мерасад
select {
case <-time.After(5 * time.Second):
fmt.Println("Камармон анҷом ёфт")
case <-ctx.Done():
fmt.Println("Контекст бекор шуд")
}
}(ctx)
w.Write([]byte("Ҷавоб фиристода шуд"))
}