Rust 为什么衍生的期货不是由东京大学堆芯::反应堆::堆芯执行的? extern板条箱东京;//0.1.8 使用东京::前奏::*; fn创建未来(x:u8)->框{ 框::新的(期货::未来::好的(2)。然后(| a |{ println!(“{}”,a); 好(()) })) } fn main(){ 让mut eloop=tokio_core::reactor::core::new().unwrap(); 让handle=eloop.handle(); 对于0..10中的x{ 设f=创造未来(x); 手柄。产卵(f); } }

Rust 为什么衍生的期货不是由东京大学堆芯::反应堆::堆芯执行的? extern板条箱东京;//0.1.8 使用东京::前奏::*; fn创建未来(x:u8)->框{ 框::新的(期货::未来::好的(2)。然后(| a |{ println!(“{}”,a); 好(()) })) } fn main(){ 让mut eloop=tokio_core::reactor::core::new().unwrap(); 让handle=eloop.handle(); 对于0..10中的x{ 设f=创造未来(x); 手柄。产卵(f); } },rust,rust-tokio,Rust,Rust Tokio,我希望这会打印到stdout,但没有发生。我是否以错误的方式使用了spawn?如评论中所述,您正在设置大量计算,但从未运行任何计算。就像迭代器一样,你可以认为未来是懒惰的。编译器通常会在您直接创建未来但从不使用它时告诉您这一点。在这里,你正在孕育未来,所以你没有得到警告,但没有任何东西可以驱动东京反应堆 在许多情况下,你有一个特定的未来,你想运行,你会驱动反应堆,直到完成。在其他情况下,你将“永远”运行反应堆,无休止地处理新的工作 在这种情况下,您可以使用: 我的理解是,这一级别的东京是为更复

我希望这会打印到stdout,但没有发生。我是否以错误的方式使用了
spawn

如评论中所述,您正在设置大量计算,但从未运行任何计算。就像迭代器一样,你可以认为未来是懒惰的。编译器通常会在您直接创建未来但从不使用它时告诉您这一点。在这里,你正在孕育未来,所以你没有得到警告,但没有任何东西可以驱动东京反应堆

在许多情况下,你有一个特定的未来,你想运行,你会驱动反应堆,直到完成。在其他情况下,你将“永远”运行反应堆,无休止地处理新的工作

在这种情况下,您可以使用:


我的理解是,这一级别的东京是为更复杂的设置保留的。许多人可以直接使用
tokio::run
tokio::spawn

 tokio_core::reactor::Core
您需要在事件循环上调用
run()
,才能运行它。然而,我不认为这个界面是打算用这种方式这些天。看看现代界面的示例。
fn main() {
    let mut eloop = tokio_core::reactor::Core::new().unwrap();
    let handle = eloop.handle();

    for x in 0..10 {
        let f = create_a_future(x);
        handle.spawn(f);
    }

    eloop.run(None);
}

eloop.turn(None);
-> Box<Future<Item = (), Error = ()>>
fn create_a_future() -> impl Future<Item = (), Error = ()> {
    futures::future::ok(2).and_then(|a| {
        println!("{}", a);
        Ok(())
    })
}
 tokio_core::reactor::Core
fn main() {
    tokio::run(futures::lazy(|| {
        for _ in 0..10 {
            tokio::spawn(create_a_future());
        }
        Ok(())
    }))
}