Rust 为什么';不要放弃这个控制柄,取消它的未来?

Rust 为什么';不要放弃这个控制柄,取消它的未来?,rust,future,rust-tokio,Rust,Future,Rust Tokio,以下是一个示例程序: extern crate futures; extern crate tokio_core; use futures::{Async, Future, Stream}; use tokio_core::reactor::Core; use tokio_core::net::TcpListener; fn main() { let mut core = Core::new().unwrap(); futures::sync::oneshot::spawn

以下是一个示例程序:

extern crate futures;
extern crate tokio_core;

use futures::{Async, Future, Stream};
use tokio_core::reactor::Core;
use tokio_core::net::TcpListener;

fn main() {
    let mut core = Core::new().unwrap();

    futures::sync::oneshot::spawn(
        TcpListener::bind(&"127.0.0.1:5000".parse().unwrap(), &core.handle())
            .unwrap()
            .incoming()
            .for_each(|_| {
                println!("connection received");
                Ok(())
            }),
        &core,
    );

    let ft = futures::future::poll_fn::<(), (), _>(|| {
        std::thread::sleep_ms(50);
        Ok(Async::NotReady)
    });

    core.run(ft);
}
extern板条箱期货;
外部板条箱东京大学核心;
使用未来:{Async,Future,Stream};
使用tokio_堆芯::反应堆::堆芯;
使用tokio_core::net::TcpListener;
fn main(){
让mut core=core::new().unwrap();
未来::同步::oneshot::繁殖(
TcpListener::bind(&“127.0.0.1:5000”.parse().unwrap(),&core.handle())
.unwrap()
.incoming()
.对于每个(| | |{
println!(“收到连接”);
好(())
}),
&核心,,
);
让我们来看看未来{
std::thread::sleep_ms(50);
Ok(异步::NotReady)
});
核心运行(ft);
}
正如您所看到的,我调用了
oneshot::spawn
,然后立即删除其返回值,从理论上讲,这将取消其中包含的未来。但是,当我运行这个程序,然后连接到
127.0.0.1:5000
,它仍然打印“connection received”(连接已接收)。为什么要这样做?我希望它不会打印任何内容,并放下
TcpListener
,从端口解除绑定。

这是一个(现已修复);版本
0.1.18
应包含修复程序


它在
SpawnHandle
/
Executor

中为
keep_running:bool
使用了倒过来的值,这可能是因为future已经在
核心注册了自己,因此您只删除了多个共享所有者中的一个?我假设这与我的回答有关-很抱歉没有测试它。我会调查的,这是一个颠倒的逻辑。如果在
SpawnHandle
上调用
forget()
,它实际上应该将其删除,这与文档所说的相反。