Heim > Artikel > Backend-Entwicklung > Wird eine in einem HTTP-Handler gestartete Goroutine immer beendet, nachdem die Antwort gesendet wurde?
Frage:
Im bereitgestellten Beispielcode, in dem eine Goroutine innerhalb eines initiiert wird HTTP-Handler (HomeHandler): Schließt die Goroutine die Ausführung immer ab, auch nachdem der Server die Antwort an zurückgegeben hat Client?
Beispielcode:
package main import ( "fmt" "net/http" "time" ) func worker() { fmt.Println("worker started") time.Sleep(time.Second * 10) fmt.Println("worker completed") } func HomeHandler(w http.ResponseWriter, r *http.Request) { go worker() w.Write([]byte("Hello, World!")) } func main() { http.HandleFunc("/home", HomeHandler) http.ListenAndServe(":8081", nil) }
Antwort:
Ja, die im Worker gestartete Goroutine wird ihre Aufgabe abschließen Ausführung in allen Situationen.
Goroutinen sind leichtgewichtige Threads innerhalb eines Go-Programms und werden nicht durch die eingeschränkt Ausführung der Hauptfunktion oder des HTTP-Handlers. Sie werden weiterhin gleichzeitig ausgeführt, es sei denn, es treten Fehler auf oder sie werden explizit beendet. In diesem Fall wird die Worker-Goroutine asynchron gestartet und die HomeHandler-Funktion kehrt unmittelbar nach dem Schreiben der Antwort an den Client zurück. Selbst nachdem die Handlerfunktion zurückkehrt und der Server die Antwort sendet, wird die Worker-Goroutine weiter ausgeführt, bis sie ihre Aufgabe, 10 Sekunden lang zu schlafen und ihre Abschlussmeldung zu drucken, beendet hat.
Die einzigen Szenarios, in denen eine Goroutine möglicherweise nicht abgeschlossen wird sind:
Das obige ist der detaillierte Inhalt vonWird eine in einem HTTP-Handler gestartete Goroutine immer beendet, nachdem die Antwort gesendet wurde?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!