Birden fazla iş kanalınız olduğunu ve önce belirli bir kanaldaki işleri işlemek istediğinizi varsayalım, çünkü bunlar daha önemlidir. Aşağıdaki örnekte, işleri her iki kanala aynı anda yerleştiriyoruz. Önemli işler urgentJobs kanalına, önemsiz işler trivialJobs kanalına gider. urgentJobs kanalında bir iş olduğu sürece, dinleyici önce onu işler, aksi takdirde trivialJobs kanalına geri döner, bu nedenle teknik olarak trivialJobs kanalındaki işler beklemeye alınırlar.


Örnek


package main

import (
"fmt"
"time"
)

func main() {
urgentJobs := make(chan int)
trivialJobs := make(chan int)

go listener(urgentJobs, trivialJobs)

go func() {
for i := 1; i <= 10; i++ {
trivialJobs<- i
}
}()
go func() {
for i := 1; i <= 10; i++ {
urgentJobs<- i
}
}()
go func() {
for i := 1; i <= 10; i++ {
urgentJobs<- i
}
}()

time.Sleep(5*time.Second)
}

func listener(urgentJobs <-chan int, trivialJobs <-chan int) {
for {
select {
case job := <-urgentJobs:
urgent(job)
default:
select {
case job := <-urgentJobs:
urgent(job)
case job := <-trivialJobs:
trivial(job)
}
}
}
}

func urgent(job int) {
fmt.Println("URG:", job)
}

func trivial(job int) {
fmt.Println("TRV:", job)
}

Test


TRV: 1
TRV: 2
URG: 1 *
URG: 1 *
URG: 2 *
URG: 2 *
URG: 3 *
URG: 3 *
URG: 4 *
URG: 4 *
URG: 5 *
URG: 5 *
URG: 6 *
URG: 6 *
URG: 7 *
URG: 7 *
URG: 8 *
URG: 8 *
URG: 9 *
URG: 9 *
URG: 10 *
URG: 10 *
TRV: 3
TRV: 4
TRV: 5
TRV: 6
TRV: 7
TRV: 8
TRV: 9
TRV: 10