"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 고루틴에서 시간 초과 후에도 HTTP 요청이 계속되는 것을 방지하는 방법은 무엇입니까?

고루틴에서 시간 초과 후에도 HTTP 요청이 계속되는 것을 방지하는 방법은 무엇입니까?

2024년 11월 15일에 게시됨
검색:874

How to Prevent HTTP Requests from Continuing After Timeout in a Goroutine?

고루틴 시간 초과

제공된 함수인 Find()는 고루틴을 사용하여 일련의 HTTP 요청을 만들고 응답을 처리합니다. 그러나 우려되는 점은 이러한 요청이 지정된 시간 초과를 초과하더라도 백그라운드에서 계속된다는 것입니다.

잠재적 고루틴 누출

고루틴 누출이 발생할 가능성은 거의 없습니다. 코드. Find() 함수가 타임아웃을 반환하면 메인 고루틴은 계속되고 백그라운드 고루틴은 본질적으로 폐기됩니다.

HTTP 요청 취소

타임아웃 후 요청을 방지하려면 , 해결책은 각 HTTP 요청에 대해 context.Context를 사용하는 것입니다. 컨텍스트를 사용하면 시간 초과가 발생한 경우 요청을 취소할 수 있습니다.

func Find() (interface{}, bool) {
  ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
  defer cancel()

  ch := make(chan Response, 1)

  go func() {
    data, status := findCicCode()
    ch 

시간 초과가 발생하면 cancel()을 호출하면 ctx 내에서 생성된 모든 HTTP 요청이 취소됩니다. 이렇게 하면 해당 요청으로 인해 추가 처리나 리소스가 소비되는 것을 방지할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3