I'm looking for a reliable to way to make sure an empty channel in Go does not block my execution. I have to iterate through a number of channels in a particular order (kind of priorities), and once I find one with items in it, read one.
Currently I do something in a similar way:
if len(myChannel) > 0 {
// Possible issue here: length could have changed to 0 making this blocking
elm := <- myChannel
return elm
}
In theory this could result into too-long of waiting, while a different channel might have an item which is ready to be "served".
Any suggestions on how to improve? I could use a mutex in the channel, but it feels like there's a better solution although I'm not sure how.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…