Rust 如何使一个简单的futures::sync::mpsc::channel示例工作?

Rust 如何使一个简单的futures::sync::mpsc::channel示例工作?,rust,message-queue,future,Rust,Message Queue,Future,我正在尝试编写一个简单的mpsc队列用法示例: extern crate futures; // v0.1 (old) use futures::{Sink, Stream}; use futures::sync::mpsc; use std::thread; fn main() { let (tx, rx) = mpsc::channel::<i32>(1000); let handle = thread::spawn(move || { tx

我正在尝试编写一个简单的mpsc队列用法示例:

extern crate futures; // v0.1 (old)

use futures::{Sink, Stream};
use futures::sync::mpsc;
use std::thread;

fn main() {
    let (tx, rx) = mpsc::channel::<i32>(1000);

    let handle = thread::spawn(move || {
        tx.clone().send(1);
        tx.clone().send(2);
        tx.clone().send(3);
    });

    let mut rx = rx.map(|x| {
        println!("stream: {}", x);
        x * x
    });

    handle.join().unwrap();

    rx.poll().unwrap();
}
extern板条箱期货;//v0.1(旧版)
使用未来:{Sink,Stream};
使用futures::sync::mpsc;
使用std::线程;
fn main(){
let(tx,rx)=mpsc::信道::(1000);
让handle=thread::spawn(移动| |){
tx.clone().send(1);
tx.clone().send(2);
tx.clone().send(3);
});
让mut rx=rx.map(| x |{
println!(“流:{}”,x);
x*x
});
handle.join().unwrap();
rx.poll().unwrap();
}

但是它没有向控制台输出任何内容(我希望它打印
流:1
流:2
流:3
)。我还尝试将
rx.poll().unwrap()
替换为
rx.wait()
,但它仍然没有输出任何内容。我在futures的文档中没有找到任何用法示例。我做错了什么?

强烈建议您阅读编译器告诉您的警告和错误消息。这是带编译器的静态类型语言的最大好处之一:

警告:必须使用的未使用结果:除非轮询,否则期货不会执行任何操作,#[警告(未使用的_必须_使用)]默认打开
-->src/main.rs:11:9
|
11 | tx.clone().send(1);
|         ^^^^^^^^^^^^^^^^^^^
警告:必须使用的未使用结果:除非进行轮询,否则期货不会执行任何操作,#[警告(未使用的_必须_使用)]默认打开
-->src/main.rs:12:9
|
12 | tx.clone().send(2);
|         ^^^^^^^^^^^^^^^^^^^
警告:必须使用的未使用结果:除非进行轮询,否则期货不会执行任何操作,#[警告(未使用的_必须_使用)]默认打开
-->src/main.rs:13:9
|
13 | tx.clone().send(3);
|         ^^^^^^^^^^^^^^^^^^^
我不是期货方面的专家,但这在没有警告的情况下编译并打印所有三个值:

extern crate futures; // 0.1.23

use futures::{sync::mpsc, Async, Future, Sink, Stream};
use std::thread;

fn main() {
    let (tx, rx) = mpsc::channel(1000);

    let handle = thread::spawn(move || {
        tx.send(1)
            .and_then(|tx| tx.send(2))
            .and_then(|tx| tx.send(3))
            .wait()
            .expect("Unable to send");
    });

    let mut rx = rx.map(|x| x * x);

    handle.join().unwrap();

    while let Ok(Async::Ready(Some(v))) = rx.poll() {
        println!("stream: {}", v);
    }
}
和_然后
用于发送前一个值之后的每个后续值<代码>等待用于阻止生成的线程,直到所有内容都成功发送。
poll
方法用于从队列中获取值,直到队列用完。有多种方法可能会失败,我忽略了它们,只关注成功案例