发生错误时如何停止goroutine

当一个发生错误时,如何停止另一个?

我必须使用res1和res2,在生产版res1中,res2不是相同的静态类型。

package main

import (
    "fmt"
    "net/http"
    "sync"
)

func main() {
    wg := &sync.WaitGroup{}
    wg.Add(2)

    var res1,res2 *http.Response
    var err1,err2 error

    go func() {
        defer wg.Done()
        res1,err1 = http.Get("http://127.0.0.1:8899")
        if err1 != nil {
            panic(err1)
        }
    }()
    go func() {
        defer wg.Done()
        res2,err2 = http.Get("http://127.0.0.1:8898")
        if err2 != nil {
            panic(err2)
        }
    }()
    wg.Wait()

    fmt.Println(res1,res2)
}
dasiy123zs 回答:发生错误时如何停止goroutine

公共上下文应该能够取消所有等待的请求。像这样:

ctx,cancel:=context.WithCancel(context.Background())
defer cancel()
cli:=http.Client{}
go func() {
   req:=http.NewRequestWithContext(ctx,http.MethodGet,url,nil)
   respose,err:=cli.Do(req)
   if err != nil {
     cancel()
     return
   }
}()

对于所有http请求,您应使用相同的ctx,如果请求失败,则将其取消。取消上下文后,所有其他http请求也应取消。

本文链接:https://www.f2er.com/3098147.html

大家都在问