Предположим, у меня есть буферизованный канал отправки и небуферизованный канал приема:
s := make(chan<- int, 5)
r := make(<-chan int)
Можно ли select
на них обоих, чтобы r
выбирался, если есть что читать, и s
, если не заполнен? Что-то эквивалентное этому, но не использующее 100% ЦП:
for {
if len(s) < cap(s) {
// Send something
}
if len(r) > 0 {
// Receive something
}
}
Обратите внимание, что я хочу решить, что отправить, во время отправки, а не раньше.
Редактировать
Этот вопрос в основном эквивалентен вопросу "Могу ли я заблокировать, пока канал не будет готов к отправке, ничего не отправляя?"