질문:
여러 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!