Goroutine execution inside an http handler

…衆ロ難τιáo~ 提交于 2019-11-28 05:29:10

问题


If I start a goroutine inside an http handler, is it going to complete even after returning the response ? Here is an example code:

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)
}

In the above example, is that worker goroutine going to complete in all situations ? Or is there any special case when it is not going to complete?


回答1:


Yes, it will complete, there's nothing stopping it.

The only thing that stops goroutines to finish "from the outside" is returning from the main() function (which also means finishing the execution of your program, but this never happens in your case). And other circumstances which lead to unstable states like running out of memory.




回答2:


Yes, it will complete totally independent of your request.

This can be useful to complete slow operations such as database updates that are not relevant to your response (e.g.: update a view counter).



来源:https://stackoverflow.com/questions/31116870/goroutine-execution-inside-an-http-handler

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!