고루틴 채널에서 시간 초과 사례가 실행되지 않음
고루틴과 채널이 포함된 코드 조각에서 사용자는 시간 초과 사례가 발생하는 당황스러운 상황에 직면합니다. select 문은 실행되지 않은 상태로 유지됩니다.
제공된 코드는 두 개의 고루틴을 설정합니다. 하나는 1.5초마다 채널에 값을 전송하고, 다른 하나는 값을 수신하거나 2초 후에 시간 초과를 트리거합니다. 그러나 타임아웃 사례는 절대 발생하지 않습니다.
이 동작이 관찰되는 이유는 무엇입니까?
핵심은 선택 루프의 각 반복에서 타임아웃 채널을 반복적으로 생성하는 데 있습니다. c1 채널에서 값이 수신될 때마다 time.After()에 의해 새 채널이 생성됩니다. 이 새 채널은 2초 후에 값을 수신하지만 이전 제한 시간 채널은 더 이상 사용되지 않습니다. 따라서 타임아웃 사례는 절대 실행될 수 없습니다.
이 문제를 해결하고 타임아웃이 예상대로 발생하도록 하려면 선택 루프 전에 타임아웃 채널을 한 번만 생성하세요. 이렇게 하면 프로그램이 실행되는 동안 채널은 활성 상태로 유지되며 c1 채널에서 2초 동안 활동이 없으면 시간 초과 사례가 트리거됩니다.
위 내용은 채널을 사용할 때 고루틴 시간 초과 사례가 실행되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!