더북(TheBook)

process() 함수에서 처리하는 작업이 리소스를 많이 사용하는 무거운 작업이라면 타임아웃 메시지를 process() 함수로 전달하여 타임아웃 후에 작업을 바로 종료하게 하는 것이 좋다.

다음은 process() 함수에 타임아웃 메시지를 전달하는 예제다.

▼ timeout.go

package main
 
import (
    “fmt”
   “time”
)
 
func main() {
    quit := make(chan struct{})
    done := process(quit)
    timeout := time.After(1 * time.Second)
 
select { case d := <-done: fmt.Println(d) case <-timeout: fmt.Println(“Time out!”) quit <- struct{}{} } } func process(quit <-chan struct{}) chan string { done := make(chan string) go func() { go func() { time.Sleep(10 * time.Second) // heavy job
done <- “Complete!” }()
<-quit return }() return done }

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.