У меня есть futures::sync::mpsc::unbounded
канал.Я могу отправлять сообщения на UnboundedSender<T>
, но у меня возникают проблемы при получении их с UnboundedReciever<T>
.
. Я использую канал для отправки сообщений в поток пользовательского интерфейса, и у меня есть функция, которая вызывается каждый кадр, и я бынравится читать все доступные сообщения из канала в каждом кадре, не блокируя поток, когда нет доступных сообщений.
Из того, что я прочитал, метод Future::poll
является своего рода тем, что мне нужно, япросто опрос, и если я получаю Async :: Ready, я что-то делаю с сообщением, а если нет, я просто возвращаюсь из функции.
Проблема в том, что poll
вызывает панику, когда нет контекста задачи (яя не уверен, что это значит или что с этим делать).
То, что я пытался:
let (sender, receiver) = unbounded(); // somewhere in the code, doesn't matter
// ...
let fut = match receiver.by_ref().collect().poll() {
Async::Ready(items_vec) => // do something on UI with items,
_ => return None
}
это паникует, потому что у меня нет контекста задачи.
Также попробовал:
let (sender, receiver) = unbounded(); // somewhere in the code, doesn't matter
// ...
let fut = receiver.by_ref().collect(); // how do I run the future?
tokio::runtime::current_thread::Runtime::new().unwrap().block_on(fut); // this blocks the thread when there are no items in the receiver
Я хотел бы помочь с чтением UnboundedReceiver<T>
без блокировки потока, когда в потоке нет элементов (просто ничего не делать).
Спасибо!