시간 초과 시 고루틴 실행 중지
Go에서 고루틴은 코드를 동시에 실행할 수 있는 가벼운 방법을 제공합니다. 그러나 때로는 특정 시간이 지난 후 고루틴을 중지해야 하는 경우가 있습니다.
문제:
시간 초과 후에도 고루틴이 계속 실행되는 문제가 사용자에게 발생했습니다. 설정되었습니다. 그들은 시간 초과에 도달하면 고루틴이 즉시 중지될 것으로 예상했지만 대신 추가 메시지를 인쇄했습니다. 다음은 예제 코드입니다.
type Response struct { data interface{} status bool } func Find() (interface{}, bool) { ch := make(chan Response, 1) go func() { time.Sleep(10 * time.Second) fmt.Println("test") fmt.Println("test1") ch <- Response{data: "data", status: true} }() select { case <-ch: fmt.Println("Read from ch") res := <-ch return res.data, res.status case <-time.After(50 * time.Millisecond): return "Timed out", false } }
예상 출력:
실제 출력:
분석:
문제는 수신 측에서 시간 초과가 설정되어 있기 때문에 발생합니다. 채널 ch는 송신 측이 아닙니다. 시간 초과는 50밀리초 내에 데이터가 수신되지 않았음을 정확하게 식별하지만, 고루틴이 추가로 실행되고 나중에 채널에서 데이터를 보내는 것을 막지는 않습니다.
해결책:
Go에서 고루틴의 실행을 직접 중단하는 것은 불가능하므로 대체 접근 방식은 다음과 같습니다. 필요:
위 내용은 시간 초과 후 Go Goroutine 실행을 중지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!