美文网首页
如何在select中实现优先级

如何在select中实现优先级

作者: 彳亍口巴 | 来源:发表于2022-01-15 19:25 被阅读0次

需求:

们有一个函数会持续不间断地从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)
        }
    }
}

相关文章

网友评论

      本文标题:如何在select中实现优先级

      本文链接:https://www.haomeiwen.com/subject/mtfxhrtx.html