What happens if I don't cancel a Context?

前端 未结 2 556
不知归路
不知归路 2021-02-01 03:24

I have the following code:

func Call(ctx context.Context, payload Payload) (Response, error) {
    req, err := http.NewRequest(...) // Some code that creates req         


        
相关标签:
2条回答
  • 2021-02-01 03:43

    If you use WithCancel the goroutine will be held indefinitely in memory, however if you use WithDeadline or WithTimeout even if you don't call cancel, the goroutine will only be held until the timer expires.

    This is still not best practice though, it's always best to call cancel as soon as you're done with the resource.

    0 讨论(0)
  • 2021-02-01 04:08

    If you fail to cancel the context, the goroutine that WithCancel or WithTimeout created will be retained in memory indefinitely (until the program shuts down), causing a memory leak. If you do this a lot, your memory will balloon significantly. It's best practice to use a defer cancel() immediately after calling WithCancel() or WithTimeout()

    0 讨论(0)
提交回复
热议问题