> 백엔드 개발 > Golang > Go의 `context` 패키지를 어떻게 사용하여 고루틴을 시간 초과할 수 있나요?

Go의 `context` 패키지를 어떻게 사용하여 고루틴을 시간 초과할 수 있나요?

Susan Sarandon
풀어 주다: 2024-11-20 04:36:02
원래의
822명이 탐색했습니다.

How Can Go's `context` Package Be Used to Timeout Goroutines?

Go는 고루틴 시간 초과를 어떻게 처리합니까?

질문:

여러 HTTP 호출을 처리하는 도구를 구축하고 있습니다. 동시 고루틴에서. 무기한 실행 시나리오를 방지하려면 특정 시간이 지난 후 고루틴을 취소하는 방법을 모색합니다.

해결책:

고루틴을 생성하는 동안 잠자기 모드로 접근하는 동안 지정된 기간 동안 다른 고루틴을 취소하기 위해 브로드캐스트 메시지를 보내는 것은 논리적인 것처럼 보입니다. 이 경우 고루틴 실행에 문제가 있는 것 같습니다. 시나리오.

이 문제를 해결하려면 Go에서 컨텍스트 패키지를 활용하는 것을 고려해 보세요. 이는 고루틴의 시간 초과 및 컨텍스트 취소를 처리하는 효과적인 방법을 제공합니다.

코드 조각:

다음은 고루틴의 시간 초과 관리를 위해 컨텍스트 패키지를 사용하는 예입니다.

package main

import (
    "context"
    "fmt"
    "time"
)

func test(ctx context.Context) {
    t := time.Now()

    select {
    case <-time.After(1 * time.Second):
        fmt.Println("overslept")
    case <-ctx.Done():
        fmt.Println("cancelled")
    }
    fmt.Println("used:", time.Since(t))
}

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)

    go test(ctx)

    // cancel context after 30 milliseconds
    time.Sleep(30 * time.Millisecond)
    cancel()
}
로그인 후 복사

이 코드는 50밀리초 시간 제한이 있는 컨텍스트를 생성합니다. 그런 다음 고루틴이 실행되어 테스트 기능을 실행하고 컨텍스트를 전달합니다. 테스트 함수 내에서 select 문은 시간 초과가 발생하거나 컨텍스트가 취소될 때까지 기다립니다. 30밀리초 후에 컨텍스트가 취소되어 고루틴이 종료되고 "취소됨"이 인쇄됩니다.

위 내용은 Go의 `context` 패키지를 어떻게 사용하여 고루틴을 시간 초과할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿