需求:
们有一个函数会持续不间断地从ch1和ch2中分别接收任务1和任务2,
如何确保当ch1和ch2同时达到就绪状态时,优先执行任务1,在没有任务1的时候再去执行任务2呢?
代码:
// worker 当select内部随机函数得到的是执行ch2的时候,先检查ch1是否就绪,否则再执行ch2
func worker(ch1, ch2 chan int, stop chan struct{}) {
for {
select {
case <-stop:
return
case job1 := <-ch1:
fmt.Println(job1)
case job2 := <-ch2:
priority:
// 当ch1就绪时就会一直执行ch1
for {
select {
case job1 := <-ch1:
fmt.Println(job1)
default:
break priority
}
}
fmt.Println(job2)
}
}
}
网友评论