Senior
HTTP sorğusunun orijinal kontekstini GoRoutine-ə keçirsəniz nə baş verir?
sobes.tech Süni İntellekt
AI-dan cavab
Əgər HTTP sorğusunun orijinal kontekstini (context.Context) ayrı bir GoRoutine-ə keçirsəniz, bu kontekst bu kontekst ləğv olunduqda və ya vaxtı bitdikdə (məsələn, müştəri əlaqəni bağladıqda və ya vaxt bitdikdə) GoRoutine-dəki kontekst də ləğv olunacaq. Bu, kontekstə bağlı olan GoRoutine-in gözlənilmədən dayandırılmasına səbəb ola bilər.
Buna görə, əgər GoRoutine HTTP sorğusunun həyat dövründən müstəqil işləməlidirsə, ayrı bir kontekst yaratmaq (məsələn, context.Background() və ya context.WithCancel() istifadə etməklə) və erkən dayandırmadan qaçınmaq yaxşıdır. Əks halda, orijinal kontekstin istifadəsi sorğu ilə əlaqəli əməliyyatların həyat dövrünü düzgün idarə etmək üçün faydalıdır.
Nümunə:
func handler(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
go func(ctx context.Context) {
// Bu GoRoutine, ctx ləğv olunduqda sona çatacaq
select {
case <-time.After(5 * time.Second):
fmt.Println("İş tamamlandı")
case <-ctx.Done():
fmt.Println("Kontekst ləğv olundu")
}
}(ctx)
w.Write([]byte("Cavab göndərildi"))
}