и читать много потоков причем читается только одно сообщение один раз.
Кроме того как сделать аналог select из go?
https://docs.rs/crossbeam/latest/crossbeam/channel/index.html https://docs.rs/async-channel/latest/async_channel/index.html
Я только мельком глянул, но там получается можно указать только фиксированный буфер или неограниченный. А вариант когда записать в канал только в том случае, если из него кто-то читает, т.е. без буфера.
https://docs.rs/futures/0.3.28/futures/macro.select.html https://docs.rs/tokio/1.28.2/tokio/macro.select.html
Цитата из доки A special case is zero-capacity channel, which cannot hold any messages. Instead, send and receive operations must appear at the same time in order to pair up and pass the message over: use std::thread; use crossbeam_channel::bounded; // Create a zero-capacity channel. let (s, r) = bounded(0); // Sending blocks until a receive operation appears on the other side. thread::spawn(move || s.send("Hi!").unwrap()); // Receiving blocks until a send operation appears on the other side. assert_eq!(r.recv(), Ok("Hi!"));
Обсуждают сегодня