2017-12-25 25 views
0

: 정지 다시 살아 highFreqChan에 하트 비트의 경우 데이터를 보낼 때무시 된 대/소문자를 선택 하시겠습니까? 내가 여러 경우에 이러한 <code>select</code>을 사용하고

for { 
    select { 
    case data:= <- highFreqChan: 
     // do something: 
    case <- time.After(time.Second * 5): 
     // send some heartbeat like data... 
    } 
} 

나는 highFreqChan이 큰 데이터를 가지고있는 경우, 하트 비트 경우 입력하지 않을 것을 발견하고, highFreqChan이 작동하는 동안 항상 하트 비트 케이스에 들어가는 방법?

+1

하트 비트는 [시간을 기준으로 절전 기능을 쓰기의 goroutine – bayrinat

+0

가능한 중복을 분리하기 위해 추가 할 수 있습니다. 이후] (https://stackoverflow.com/questions/32937883/writing-sleep-function-based-on-time-after/32937957#32937957). – icza

답변

8

time.After을 선택 조건의 일부로 실행합니다. 즉, 선택에 도달했을 때 평가됩니다 ... 즉 만료됨을 의미합니다. 에 도달하면 5 초가 만료됩니다. 따라서 highFreqChan에 5 초 동안 아무런 데이터가없는 경우에만 해당 사례를 입력하게됩니다. 당신이 뭔가를 모든 5 초 싶은 경우

는,과 같이, 대신 time.Ticker 사용

heartbeat := time.NewTicker(5 * time.Second) 
defer heartbeat.Stop() 
for { 
    select { 
    case data:= <- highFreqChan: 
     // do something: 
    case <- heartbeat.C: 
     // send some heartbeat like data... 
    } 
}