在 HTTP 处理程序内执行 Goroutine 时,很自然地想知道响应返回后它是否会继续执行。考虑以下示例代码:
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) }
此代码在 HomeHandler 中启动一个 goroutine,该 goroutine 在打印完成之前休眠 10 秒。一旦写入响应,主协程就会从 HomeHandler 函数返回。
在这个特定场景中,goroutine 确实会完成其执行,打印语句“worker开始”和“工作人员已完成”到控制台。这是因为:
在这种情况下提前终止 goroutine 的唯一方法就是遇到不稳定的状态,例如正在运行内存不足,或者使用同步技术显式停止 goroutine(本代码示例中未涵盖)。
以上是HTTP 响应发送后我的 Goroutine 会完成吗?的详细内容。更多信息请关注PHP中文网其他相关文章!