OxL Справочник OxL
РусскийEnglish

8.7 Каналы и select

oxl
let (tx, rx) = chan<Job>(cap: JOB_QUEUE)

select {
  recv job from rx  => process(job)
  send r to results => sent += 1
  after IDLE_TIMEOUT => log.info("idle")
  else              => tick()          // неблокирующий вариант
}
  • tx.send(x) приостанавливается при заполненном буфере; cap: 0 — рандеву.
  • rx.recv() -> T | Closed. Канал закрыт, когда уничтожены все Sender.
  • select ждёт первую готовую ветку; при нескольких готовых выбирает равновероятно. Ветка else делает select неблокирующим.

См. также

Исходник: docs/spec/oxl-standard.md