복수 혹은 단수 채널을 기다리고 있을 때 time.After()를 사용하여 타임아웃 채널을 만들고, 이를 select 문에 추가하면 지정된 시간이 경과한 후 타임마웃하는 기능을 구현할 수 있습니다.
이 경우에는 6으로 설정해놨기 때문에 6초 전에 sleep이 끝나는 run1이 출력되시는걸 확인하실 수 있습니다.
package main
import "time"
func main() {
ch1 := make(chan bool)
ch2 := make(chan bool)
go func(done chan bool) {
time.Sleep(5 * time.Second)
done <- true
}(ch1)
go func(done chan bool) {
time.Sleep(10 * time.Second)
done <- true
}(ch2)
//time.After()는 입력 파라미터에 지정된 시간이 지나면 Ready 되는 채널 리턴
timeoutChan := time.After(6 * time.Second)
select {
case <-ch1:
println("run1")
case <-ch2:
println("run2")
case <-timeoutChan: //select 문 내 타임아웃 체크
println("timeout")
}
}
output : run1
'공부 > 개발' 카테고리의 다른 글
주식 자동매매 프로그램 - 1. AWS 인스턴스 생성 (0) | 2020.11.27 |
---|---|
go 프로그래밍 - main 에러를 내다 (0) | 2020.11.16 |
GO 프로그래밍 - 기초 1편 환경 설정 (0) | 2020.11.11 |
swap (0) | 2018.01.10 |
상속 (0) | 2017.12.27 |