2015-01-30 3 views
5

제어 할 수없는 타사 라이브러리에서 차단 작업이 있습니다. 그것은 잠재적으로 영원히 갈 수 있습니다. 그래서 나는 그것에 타임 아웃을 설정하고 싶다. 분명한 방법은 채널 및 goroutine으로 감싸고 그 결과로 time.After을 선택하는 것입니다. 그러나 문제는 차단 작업을 실행하는 goroutine이 잠재적으로 영원히 지속될 수 있다는 것입니다. 여기 Go에서 차단 작업 취소

http://repl.it/90o

goroutine을 취소하거나 쓰레기 수집 할 수있는 방법이 있나요을 설명하는 예입니다?

+2

타사 라이브러리가 오픈 소스입니까? 어쩌면 당신은 그들을 위해 이것을 고칠 수 있으며 끌어 오기 요청을 제출할 수 있습니다. – tgrosinger

답변

3

goroutine을 "외부"에서 멈출 수 없습니다. goroutine은 일종의 종료 신호 (일반적으로 채널)를 지원해야합니다. 그러나 그렇지 않으면 강제로 또는 죽일 수 없습니다.

사용중인 타사 라이브러리에 대해 아무 것도 할 수 없다면 할 수있는 대부분의 작업은 다른 프로세스 (실행중인 다른 응용 프로그램)에서 실행할 수 있습니다. 그러나 그것은 단지 추악하고 너무 성가시다.

0

아무 것도 할 수 없다고 생각합니다. Go에서는 외부에서 goroutine을 멈출 수 없습니다. 이 라이브러리를 고칠 수없고 그것이 영원히 차단 될 수 있다고 생각되면, 제어 할 수있는 새로운 라이브러리를 작성하십시오.